Обратите внимание, что вы можете обращаться к восьмеричным/шестнадцатеричным числам непосредственно в sed
как:
sed -e 's/\o302/ /g' #in octal
sed -e 's/\xC2/ /g' #in hex
Выполняется с конвейером, но это не очень хорошо
$ sed -n '/comment/,$ p' file | sed -r '0,/comment/ s/comment - (.*)/\1/'
text1
text1 continue
comment - text2
text2 continue
comment - text 3
text3 continue
Пояснение
sed -n '/ comment /, $ p' file
печатать строки из comment
до конца sed -r '0, / comment / s / comment - (. *) / \ 1 /'
найти первую строку с комментарием
и отредактировать удалить комментарий -
Самый простой способ сделать это с помощью sed
- с помощью группировки команд:
{ sed '/PATTERN/!d;s///;q'; cat; } <infile
it d
удаляет все строки, которые не совпадают, при первом совпадении s
ubstitutes по вашему запросу и завершается (автоматическая печать), затем cat
берет на себя и печатает оставшиеся строки, если таковые имеются.
Не хочу сказать, что вы не можете сделать это только с sed
:
sed '/PATTERN/,$!d # delete all lines not in this range
//{ # if the line matches
x;//!{ # exchange and IF what was in hold space doesn't match
g;s///;b # get hold space content, replace, go to end of script
}
x # ELSE exchange back (do nothing)
}' <infile
Я использовал ШАБЛОН
, чтобы не усложнять (замените его на ^. * Комментарий -
или какой там шаблон).