Как сопоставить строки ровно с тремя числами?

Как я могу использовать grep для сопоставления 3 чисел в файле? Мой файл выглядит так:

123  
122    
222  
333443  
fdsfs5454353  
dsfsfjsk4654641

Обратите внимание, что некоторые строки содержат пробелы в конце. Я хочу сопоставить только трехзначные числа. Я старался:

grep -E [0-9]{3} test.txt
grep -E '\<[0-9]{3}\>' test.txt

person Gabriel    schedule 11.02.2016    source источник
comment
Вы имеете в виду числа, содержащие ровно три цифры, или каждое трехзначное совпадение в строке?   -  person Todd A. Jacobs    schedule 12.02.2016
comment
Ваш первый пример сломается, потому что он не указан. Ваш второй пример отлично работает для меня, но ниже я предлагаю более простое решение.   -  person Todd A. Jacobs    schedule 13.02.2016


Ответы (2)


grep '^[0-9][0-9]*' test|awk '{if(length($0) == 3) print $0}' 

или если у вас есть пробел:

sed 's/[ \t]*$//' test|grep   '^[0-9][0-9]*'|awk '{if(length($0) == 3) print $0}'

(спасибо @shellter)

person axiom    schedule 11.02.2016
comment
Я сделал это: egrep -o '\s([0-9]{3})\s' имя файла - person Gabriel; 12.02.2016
comment
Оба решения работают для меня, вы уверены, что после цифр нет пробела и т. Д.? - person axiom; 12.02.2016
comment
ваше решение awk также будет соответствовать abc . Всем удачи. - person shellter; 12.02.2016
comment
ой, используйте awk '/^[0-9][0-9][0-9]$/' :-) ! Удачи. - person shellter; 12.02.2016
comment
хм, awk '/^[0-9][0-9][0-9]$/' не сработало, но сработало egrep -o '\s([0-9]{3})\s' - person Gabriel; 12.02.2016
comment
@Gabriel: Хорошо, как насчет этого ;-) awk '/^[[:space:]]*[0-9][0-9][0-9][[:space:]]*$/' file? Всем удачи. - person shellter; 12.02.2016

Используйте расширенные регулярные выражения с границами

я спросил, имели ли вы в виду числа с ровно тремя цифрами или каждое трехзначное совпадение в строке. Вы ответили, что вам нужны только строки, содержащие ровно три цифры.

Расширенный grep предоставляет простое решение для этого. Рассмотрим следующее:

$ egrep '^\d{3}\b' /tmp/corpus 
123  
122    
222

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

person Todd A. Jacobs    schedule 12.02.2016