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