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

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

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

adasfddfd09
dsassd90897
323sdsdsdsd
sdddsdf56
dfdf45fdfdf

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

решение1

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

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

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

и

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

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


Греп

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

Сед

</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>.

решение2

sedплюс 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соответствует всем строкам, которые заканчиваются ровно двумя цифрами.

Связанный контент