Удалить целую строку, начинающуюся с паттерна, находящегося где-либо после другого паттерна

Да, Gentoo Hardened использует fstack-protector-all по умолчанию, поэтому вам не нужно передавать CFLAGS самостоятельно, чтобы включить защиту от разбиения стека. Стандартные CFLAGS для профиля Hardened включают:

CFLAGS="-fPIE -fstack-protector-all -D_FORTIFY_SOURCE=2" LDFLAGS="-Wl,-z,now -Wl,-z,relro"

Дополнительную информацию смотрите в этом разделе из Gentoo Hardened FAQ.

-1
14.09.2018, 14:20
3 ответа

По вашему вопросу я только что создал этот text.txt. Если содержимое вашего файла отличается, сообщите нам об этом.

bash-4.1$ cat test.txt
#Match
---- test
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ funny
------ lots of fun
#Match
dafasf
adsfasf

bash-4.1$ awk '/#Match/ {flag=1} flag && /^---/ {flag=0;next} 1' test.txt
#Match
hello
#Match
this is sample
adsafasf
asfas
fasf
#Match
------ lots of fun
#Match
dafasf
adsfasf
2
28.01.2020, 05:07

Использованиеsed:

sed -e '/#Match/ {n; /^---/d; }' infile

Команда nсчитывает следующую строку ввода в пространство шаблонов и /^---/dудаляет эту строку, если она начинается с ---, только если предыдущая строка соответствует #Match.

Ответ на пересмотренный вопрос:

sed -e '/#Match/,$ { /^---/d; }' infile
1
28.01.2020, 05:07

Как насчет

awk '/#Match/,EOF {if (/^---/) next} 1' file

Начиная со строки, соответствующей #Match, пока переменная EOFне станет истинной (, чего никогда не произойдет, поэтому = конец входного потока ), пропустить фактическую строку, если она соответствует трем (или больше )тире в начале.

0
28.01.2020, 05:07

Теги

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