Как запросить состояние терминала, установленное управляющими последовательностями, такими как tput smam?

Другое решение sedпотерпит неудачу, если firstmatchвстречается в 1-й строке 1 .

Будьте проще, используйте один диапазон и пустое 2 регулярное выражение:
либо печатать все в этом диапазоне, кроме концов диапазона (авто -печать отключена)3:

sed -n '/firstmatch/,/secondmatch/{//!p;}' infile

или, короче, удалить все, что не входит в этот диапазон, а также удалить концы диапазона:

sed '/firstmatch/,/secondmatch/!d;//d' infile


1 :Причина в том, что если второй адрес является регулярным выражением, то проверка конечного совпадения начнется со строки, следующей за строкой, совпавшей с первым адресом .
Следовательно, /firstmatch/никогда не оценивается для 1-й строки ввода, sedпросто удалит его, поскольку он соответствует номеру строки в 1,/RE/, и перейдет ко 2-й строке, где он проверит, соответствует ли строка/firstpattern/

2:Когда REGEX пусто (, т. е.//)sedведет себя так, как если бы последнее REGEX , использованное в последней примененной команде, (либо как адрес или как часть замещающей команды ).

3 :синтаксис ;}предназначен для современных sedреализаций; в более старых используйте либо новую строку вместо точки с запятой, либо отдельные выражения, например.sed -n -e '/firstmatch/,/secondmatch/{//!p' -e '}' infile

2
25.12.2019, 10:05
0 ответов

Теги

Похожие вопросы