Итак, у меня есть строка:
ID: 54376
Можете ли вы помочь мне сделать регулярное выражение, которое будет возвращать только числа без "ID:"?
ПРИМЕЧАНИЕ. Эта строка находится в файле.
text-processing
regular-expression
Блейк Гиббс
источник
источник
-o
и-P
являются расширениями GNU дляgrep
.-o
работает и на BSD. Поддержка PCRE с-P
не всегда компилируется.Используйте
egrep
с-o
илиgrep
с-Eo
опцией, чтобы получить только соответствующий сегмент. Используйте в[0-9]
качестве регулярного выражения, чтобы получить только цифры:источник
Есть много способов сделать это. Например:
Используйте GNU
grep
с последними PCRE и сопоставьте числа послеID:
:Используйте
awk
и просто напечатайте последнее поле всех строк, начинающихся сID:
Это также будет печатать поля, которые не являются числами, хотя, чтобы получить только цифры, и только во втором поле, используйте
Используйте GNU grep с расширенными регулярными выражениями и проанализируйте его дважды:
источник
\K
делает в первом примере?-o
печатать только совпадающую часть, а также отбрасывать вещи, которые мне не интересны. Сравнитьecho "foobar" | grep -oP "foobar"
иecho "foobar" | grep -oP 'foo\Kbar'
Это будет печатать только все числа и пробелы, встречающиеся после
ID: 54376
в любом файле ввода.Я только что немного обновил вышеперечисленное, чтобы сделать его немного быстрее
*
и неp
набирать пустые строки после удаления не числовых символов.В нем рассматриваются строки из регулярных выражений
/ID: 54376/
,
через$
последний и на нихs///
удаляет все или любые*
символы ,^
не[^ 0-9]*
тоp
rints/
любую/
строку, содержащую.
символ остальные.DEMO:
ВЫВОД:
источник
Используя sed:
Это
-n
«ничего не печатать по умолчанию»,/^ID: [0-9][0-9]*$/
это «для строк, соответствующих этому регулярному выражению» (начинается с «ID:», затем 1 или более цифр, затем конец строки), иs/ID: //p
имеет формуs/pattern/repl/flags
-s
означает, что мы Вы делаете замену, чтобы заменить шаблон"ID: "
заменяющим текстом""
(пустой строкой), используяp
флаг, который означает «напечатать эту строку после выполнения замены».Вывод:
источник
Еще одна команда GNU sed,
Он печатает любое число после
ID:
источник
+
. Если разница между один символов и 3 -х символов ваш скрипт не может работать во всехsed
с , которые вы , вероятно , следует сделать следующее :sed -n '/ID: \([0-9][0-9]*\).*/{s//\1/;s/.*[^0-9]//;/./p}'
. Ваш ответ также пропускает первыйID: [0-9]
в строке, содержащей два вхожденияID: [0-9]
.Используйте grep + awk:
Бонус: легко читается :)
источник
grep
если вы используетеawk
.awk '/^ID/ { print $2 }'
делает то же самое и избегает проблем с буферизацией строки grep . Это также похоже на одно из решений в ответе @ terdon.