Как я могу использовать regex для извлечения текста после двух условий в переменную?

Примерно так:

sed '/^[[:blank:]]*B$/{n;s/Hello/Hi/g;}'

Предполагается, что нет последовательных B s (одна строка B , за которой следует другая B ) линия).

В противном случае вы можете сделать:

awk 'last ~ /^[[:blank:]]*B$/ {gsub("Hello", "Hi")}; {print; last=$0}'

Эквивалент sed будет выглядеть так:

sed 'x;/^[[:blank:]]*B$/{
       g;s/Hello/Hi/;b
     }
     g'

Чтобы заменить второе слово после B , или заменить world ] с вселенной , только если две строки выше содержат B :

awk 'l2 ~ /B/ {gsub("world","universe")}; {print; l2=l1; l1=$0}'

Чтобы обобщить его на n строк выше:

awk -v n=12 'l[NR%n] ~ /B/ {gsub("foo", "bar")}; {print; l[NR%n]=$0}'
1
22.01.2015, 19:31
1 ответ

Попробуйте это:

perl -0ne 'print $& if /^Host.*?IdentityFile\s+\K[^\n]+/ms' file
1
27.01.2020, 23:51

Теги

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