регулярное выражение и grep соответствуют только строке с одной или двумя цифрами - PullRequest
4 голосов
/ 31 июля 2011

Мне нужно извлечь строку, содержащую только одно или двузначное число. мой файл (тест) выглядит как

test1correct
test12something
test123wrong

В приведенном выше примере я хочу, чтобы grep только для test1correct и test12something

Я пробовал это grep "test [0-9] {1,2}" test, но он дает мне все 3 строки.

Ответы [ 4 ]

6 голосов
/ 31 июля 2011

использование: grep "test[0-9]{1,2}[^0-9] "

2 голосов
/ 30 августа 2012

Используя lookaheads и lookbehinds, вы можете указать «ровно одну цифру» или «ровно три цифры» или что угодно. Это делает ровно одну цифру:

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
Result: 4

Что он делает, так это находит цифру, которой не предшествует цифра, а также за которой не следует цифра. Также работает для более чем одной цифры. Это делает три цифры, затем, по крайней мере, одно из чего-либо еще, затем одну цифру:

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])'
Result: 123_4

Пока я в этом, эта комбинация grep и sed найдет строку из трех цифр, затем одну или несколько из чего-то еще, затем одну цифру, и аккуратно извлечет только эти части. (Возможно, был другой способ сделать это просто в grep с группами.)

echo 'WB123_4' | grep -Po '(?<![[:digit:]])([[:digit:]]{3})(?![[:digit:]]).+(?<![[:digit:]])([[:digit:]]{1})(?![[:digit:]])' | sed -r -e 's/[^[:digit:]]+/ /'
Result: 123 4

Примечание: флаг -P для grep означает использование регулярных выражений в стиле Perl, что позволяет вам использовать lookaheads и lookbehinds.

1 голос
/ 31 июля 2011

Попробуйте это:

test[0-9]{1,2}[A-Za-z]+
0 голосов
/ 03 июля 2019

cat tst --- tst файл содержит следующие данные 1 0 оператор 4 5 5

кошка тст | grep [0-9] --- пока я использую grrp, возвращаю только 1

1

как получить все числа в файле tst?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...