С sed
, не могли бы вы попробовать следующее:
sed '
:l # define a label "l"
N # read next line and append to the pattern space
$!b l # goto "l" unless eof
s/var gfjfgjk.*appendChild(s);\n}//
# remove the specified block including newlines
' file
Сначала все строки в шаблоне пропадают, чтобы мы могли обрабатывать сразу несколько строк (включая символы новой строки).
Возможная проблема заключается в том, что если файл содержит шаблон appendChild(s);\n}
в несколько строк, sed
попадет в longest match
из-за greedy
природы регулярного выражения.
В качестве альтернативы , если perl
является вашим вариантом, вы также можете сказать:
perl -0777 -pe 's/var gfjfgjk.*?appendChild\(s\);\n}//s' file
- Опция
-0777
говорит perl
прочитать все строки сразу. - регулярное выражение
.*?
разрешает совпадение shortest
. - Опция
s
в конце делает точку .
совпадением с новой строкой. В противном случае точка в perl
регулярном выражении не соответствует символу новой строки.