Если вам нужно сопоставить только полные строки, вы можете выполнить эту задачу с
awk
. Что-то вроде:
awk -v NEWTEXT=foo 'BEGIN{n=0} /COMMENT_BEGIN/ {n=1} {if (n==0) {print $0}} /COMMENT_END/ {print NEWTEXT; n=0}' < myfile.txt
Если файл не очень хорошо отформатирован, с комментариями
ту же строку, что и текст, который вы хотите сохранить или удалить, тогда я
будет использовать perl
, прочитать весь файл в одну строку,
сделайте совпадение регулярного выражения и замените эту строку, затем запишите новую строку в
новый файл. Это не так просто, и вам нужно написать скрипт perl
для выполнения этой работы.
Что-то вроде:
#!/usr/bin/perl
$newtext = "foo\nbar";
$/ = ''; # no input separator so whole file is read.
$s = <>; # read whole file from stdin
$startPattern = quotemeta('<!--WIERD_SPECIAL_COMMENT_BEGIN-->');
$endPattern = quotemeta('<!--WIERD_SPECIAL_COMMENT_END-->');
$pattern = $startPattern . '.+' . $endPattern;
$s =~ s/$pattern/$newtext/sg;
print $s;