Удалите до первого вхождения, отредактируйте эту строку и напечатайте оставшиеся строки без изменений [закрыто]

Обратите внимание, что вы можете обращаться к восьмеричным/шестнадцатеричным числам непосредственно в sed как:

sed -e 's/\o302/ /g'  #in octal
sed -e 's/\xC2/ /g'   #in hex
1
21.11.2018, 23:41
2 ответа

Выполняется с конвейером, но это не очень хорошо

$ 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 /' найти первую строку с комментарием и отредактировать удалить комментарий -
0
27.01.2020, 23:46

Самый простой способ сделать это с помощью 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

Я использовал ШАБЛОН , чтобы не усложнять (замените его на ^. * Комментарий - или какой там шаблон).

1
27.01.2020, 23:46

Теги

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