как отобразить все строки из одной, которые соответствуют регулярному выражению в Linux - PullRequest
5 голосов
/ 15 сентября 2010

Я хочу отобразить все строки из одной, которые соответствуют регулярному выражению

если у меня есть файл

foo
bar123
baz12435
lorem
ipsum
dolor
sit
amet

это display-from baz[0-9]* < file должно возвращаться (не имеет значения, соответствует ли оно отображаемой строке)

lorem
ipsum
dolor
sit
amet

Как я могу сделать это в Linux (с помощью sed, awk или grep)

Ответы [ 6 ]

6 голосов
/ 15 сентября 2010

Просто используйте grep:

$ grep -E 'baz[0-9]*' file -A9999

Здесь опция ' -A ' сообщает grep, сколько строк отображать после совпадения. Это немного неуклюже, но если есть верхняя граница для длины ваших входных файлов, это может работать нормально.

5 голосов
/ 16 сентября 2010

Принятый ответ печатает строку, которая включает шаблон.Если вы хотите исключить эту строку:

sed  '1,/baz[0-9]*/d' file

Более простая версия принятого ответа:

sed  -ne '/baz[0-9]*/,$p' file

В некоторых версиях sed -e не требуется, кроме как вопределенные обстоятельства (но все равно принимают это), а некоторые делают.Эти примеры иллюстрируют оба типа.

5 голосов
/ 15 сентября 2010
sed -e '/baz[0-9]*/,$b' -e 'd' file

Это удалит все строки из ввода, кроме строк из первой строки, которые соответствуют регулярному выражению (/ baz [0-9] * /) до конца файла ($).

1 голос
/ 15 сентября 2010

используйте awk

awk '/baz/{f=1;next}f' file
0 голосов
/ 16 сентября 2010
ruby -ne 'print unless 1 .. /baz[0-9]/' file
0 голосов
/ 15 сентября 2010

Я использую grep для поиска ключевого слова в файле.Я использую следующее:

Syntax => grep pattern filename
examlpe
grep amet /path_to_file
...