Найдите строку с двумя последними символами в виде числовых

Предположим, у меня есть файл вроде этого:

adasfddfd09 dsassd90897 323sdsdsdsd sdddsdf56 dfdf45fdfdf 

Я хочу искать только те строки, у которых есть последние два символа, числовые с sed , grep и awk .

Команды для grep и sed

Похоже, что исходный вопрос был отформатирован неправильно. Следовательно, самые простые команды grep и sed:

 egrep '[0-9]{2}$' /path/to/file 

а также

 sed -rn '/[0-9]{2}$/p' /path/to/file 

Я оставлю объяснения ниже, которые включают информацию об этих командах, но также работают с несколькими строками в одной строке. Они все равно будут работать, но включают дополнительный, потенциально посторонний код.


Grep

 grep '[^ ]*[0-9]\{2\}( |$)' /path/to/file 

объяснение

  • [^ ]* Соответствует любому количеству непространственных символов.
  • [0-9]\{2\} Сопоставьте две цифры. (Вместо этого вы можете использовать [0-9][0-9] .)
  • ( |$) Цифры должны быть завершением «слова», поэтому за ним следует либо пробел, либо терминатор конца строки.

Вместо этого я предпочитаю использовать расширенный grep, так как вам не нужно будет скрывать фигурные скобки. Следовательно,

 grep -E '[^ ]*[0-9]{2}( |$)' /path/to/file 

или

 egrep '[^ ]*[0-9]{2}( |$)' /path/to/file 

Вопрос был отредактирован, но если в строке есть несколько совпадений, и вы хотите выводить только совпадения, используйте флаг -o . т.е.

 egrep -o '[^ ]*[0-9]{2}( |$)' /path/to/file 

Sed

 </path/to/file tr ' ' '\n' | sed -rn '/[0-9]{2}$/p' 

объяснение

  • </path/to/file tr ' ' '\n' Введите файл и измените все пробелы на новые строки.
  • sed -rn Используйте расширенные регулярные выражения (аналогичные выше) с -r и не печатайте сразу все выходные данные с помощью -n .
  • [0-9]{2}$ Это регулярное выражение аналогично приведенному выше в строке grep. Однако, поскольку мы уже удалили все пробелы, нам не нужно определять непространственные символы в начале, а также возможное место в конце.
  • /<regex>/p Распечатайте строки, соответствующие <regex> .

sed plus awk должен сделать трюк!

 sed 's/ /\n/g' file1 | awk '/[0-9][0-9]$/' 

Если ваш файл содержит эти строки по очереди, awk должен делать трюк!

 awk '/[0-9][0-9]$/' file1 

Если вы хотите сопоставить строки, которые заканчиваются ТОЧНО двумя числами и не более , используйте вместо них следующие команды:

 sed 's/ /\n/g' file1 | awk '/[^0-9][0-9][0-9]$/' 

а также

 awk '/[^0-9][0-9][0-9]$/' file1 

Вывод:

 adasfddfd09 dsassd90897 sdddsdf56 

объяснение

  • sed разбивает вашу входную строку на несколько строк.
  • awk соответствует всем строкам, которые заканчиваются ровно двумя числами.