LINUX.ORG.RU

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

 


1

4

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

★★★★★

awk '/$regex/ ? ++i : i' $filename
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

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

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

Собственно, примерно то же, что и у тебя. «64» - строка, с которой выводить. Регулярка, в общем.

YAR ★★★★★
()
Ответ на: комментарий от 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
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.