LINUX.ORG.RU

Вывод строк с определённого места

 


1

5

Как вывести строки, начиная со строки, содержащей определённое регулярное выражение, далее все строки под ней до конца файла?
У grep есть ключ -A, но ему надо указывать количество строк после совпадения. Надо получать вывод до конца файла.

★★★★★

Как вывести строки, начиная со строки, содержащей определённое регулярное выражение, далее все строки под ней до конца файла?

sed -n '/RE/,$p'
emulek ()
Ответ на: комментарий от emulek

Регулярное выражение для пустой подстроки (именно подстроки, а не строки ^$). Так как любая строка содержит в себе пустую подстроку, то оно матчит всё что угодно.

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

Регулярное выражение для пустой подстроки (именно подстроки, а не строки ^$). Так как любая строка содержит в себе пустую подстроку, то оно матчит всё что угодно.

я в курсе. Но // является _вторым_ адресным выражением, т.е. ДО чего искать. Если // матчит всё, что угодно, то должно получится вот так:

$ seq 1 100 | sed -n '/90/,/.*/p'
90
91
Видимо в данном случае матчится уже скомпилированое регулярное выражение, пруф:
$ echo "1                        
2
3
4
5
2
6
7
8"|sed -n '/2/,//p'
2
3
4
5
2
вывод строк от /2/ до /2/.

emulek ()
Ответ на: комментарий от emulek

Видимо в данном случае матчится уже скомпилированое регулярное выражение

Да, всё так. Я ещё думал (плохо думал раз упустил, что это конец диапазона): обычно ведь пустой RE не используется (ничего не матчит), либо используется для неявного переиспользования предыдущего шаблона (как в Vim).

@[~]$ seq 1 100 | sed -n '//p'
sed: -e expression #1, char 0: no previous regular expression

xaizek ★★★★★ ()
Ответ на: комментарий от xaizek

используется для неявного переиспользования предыдущего шаблона (как в Vim).

оно везде так AFAIK

$ echo "12345" |sed '/3/s///'
1245
emulek ()
Ответ на: комментарий от emulek

Буду знать. Раньше использовал подобную конструкцию именно в том варианте, как было задано в топике.

YAR ★★★★★ ()
Ответ на: комментарий от anonymous

Для любителей палочек:

seq 10 | awk '_=_||/5/'

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.