Я нахожусь в оболочке, и у меня есть эта строка: 12 BBQ ,45 rofl, 89 lol
Используя regexp: \d+ (?=rofl)
, Я хочу 45
в результате.
Это корректно для использования regex для извлечения данных из строки? Лучшее, которое я сделал, должно выделить значение в части regex редактора онлайн. Большую часть времени это удаляет значение из моей строки.
Я занимаюсь расследованиями expr
, но все, что я получаю, является синтаксическими ошибками.
Как мне может удаться извлечь 45 в сценарии оболочки?
Вы можете сделать это с помощью режима Perl GNU grep:
echo "12 BBQ ,45 rofl, 89 lol"|grep -P '\d+ (?=rofl)' -o
-P
означает стиль Perl, а -o
означает только совпадение.
Да, регулярное выражение, безусловно, можно использовать для извлечения части строки. К сожалению, разные варианты * nix и разные инструменты используют немного разные варианты Regex.
Эта команда sed должна работать на большинстве разновидностей (протестировано на OS / X и Redhat)
echo '12 BBQ ,45 rofl, 89 lol' | sed 's/^.*,\([0-9][0-9]*\).*$/\1/g'
Кажется, что вы спрашиваете о нескольких вещах. Чтобы ответить на них:
Вы можете извлечь числа, заключив их в круглые скобки:
.*(\d+) rofl.*
и используя $1
для извлечения строки (.*
- для "остальные до и после в одной строке)
На примере sed идея выглядит так: заменить все строки в файле только подходящим числом:
sed -e 's/.*(\d+) rofl.*/$1/g' inputFileName > outputFileName
или:
echo "12 BBQ ,45 rofl, 89 lol" | sed -e 's/.*(\d+) rofl.*/$1/g'
Вы можете использовать оболочку (например, bash)
$ string="12 BBQ ,45 rofl, 89 lol"
$ echo ${string% rofl*}
12 BBQ ,45
$ string=${string% rofl*}
$ echo ${string##*,}
45
Вы, безусловно, можете извлечь эту часть строки, и это отличный способ разобрать данные. Синтаксис регулярных выражений сильно различается, поэтому вам нужно ссылаться на файл справки для используемого вами регулярного выражения. Вы можете попробовать такое регулярное выражение, как:
[0-9]+ *[a-zA-Z]+,([0-9]+) *[a-zA-Z]+,[0-9]+ *[a-zA-Z]+
Если ваша программа с регулярным выражением может выполнять замену строки, замените всю строку желаемым результатом, и вы можете легко использовать этот результат.
Вы не упомянули, используете ли вы bash или другую оболочку. Это поможет получить более точные ответы при обращении за помощью.