Я пытаюсь закомментировать соответствующую строку в файле и добавить новую строку прямо под соответствующей строкой. Есть какой-либо способ сделать это ? Может быть, с помощью sed или awk.

Например,

line1 is good
line2 is bad
line3 is to be commented
line4 is final

Я хочу сопоставить строку 3 здесь (не используя номер строки), закомментировать и добавить новую строку прямо под ней.

Ожидаемый результат

line1 is good
line2 is bad
#line3 is to be commented
new line
line4 is final

1 ответ1

4

Вывод на консоль:

sed '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt

Заменить в файле и создать резервную копию:

sed -i.bak '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt

Заменить в файле:

sed -i '/^line3/s/^\(.*\)$/#\1\n/' testdata.txt

Объяснение:

Общий синтаксис для sed:

/pattern/action

Шаблон - ^line3 (замените его на свой шаблон)

Действие s/^\(.*\)$/#\1\n/

s - команда замены sed (s/pattern1/pattern2/)

^(.*)$ - шаблон RegEx для соответствия всей строке

#\1\n - заменить строку на: hash (#) + обратная ссылка RegEx (\1) + новая строка (\n)

Запомни:

  • добавить обратную косую черту перед скобками
  • окружить всю строку круглыми скобками

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .