почему ssh myLogin @ localhost работает, а ssh root @ localhost - нет? [дубликат]

Измененная входная выборка для включения блока startStr ... endStr без bbb перед совпадающим блоком

$ cat ip.txt 
startStr
foo
bar
endStr
fff
baz
startStr
aaa
bbb
ccc
endStr
xxx
yyy
startStr
ddd
endStr
ddd
bbb


awk solution

awk '/startStr/{f=1; m=0; buf = $0; next}
     /bbb/ && f{m=1}
     f{buf = buf ORS $0}
     /endStr/ && f{f=0; if(m==1)print buf}
    ' ip.txt
  • / startStr / {f = 1 ; m = 0; buf = 0 $; next} установить флаг, чтобы указать начало блока, очистить совпадение, инициализировать буфер и перейти к следующей строке
  • / bbb / && f {m = 1} , если строка содержит bbb , установить матч. f используется, чтобы избежать сопоставления bbb вне startStr ... endStr
  • f {buf = buf ORS $ 0} , пока установлен флаг, накапливать входные строки
  • / endStr / && f {f = 0; if (m == 1) print buf} в конце блока, буфер печати, если совпадение было найдено


как однострочное:

$ awk '/startStr/{f=1; m=0; buf = $0; next} /bbb/ && f{m=1} f{buf = buf ORS $0} /endStr/ && f{f=0; if(m==1)print buf}' ip.txt 
startStr
aaa
bbb
ccc
endStr


Более простое решение perl , прихлебывая весь входной файл - предполагает, что нет таких блоков, как startStr ... startStr ... endStr (т.е. нет endStr для первого startStr)

$ perl -0777 -ne '(@m) = /startStr.*?endStr\n/gs; print grep { /bbb/ } @m' ip.txt 
startStr
aaa
bbb
ccc
endStr
1
15.11.2015, 21:55
0 ответов

Теги

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