Добавить строку в начало строки, содержащей шаблон

Я пытаюсь комментировать строки в моих сценариях, где присутствует шаблон из данного списка шаблонов. Теперь я могу сделать это следующим образом в командной строке:

sed '/abcdefg/ s/^/#/' file.sql > file.commented

Но если я использую переменную для шаблона (вместо abcdefg, как указано выше), я не смогу сделать то же самое.

pattern=abcdefg
sed '/$pattern/ s/^/#/' file.sql > file.commented

Похоже, он экранирует символ доллара и не принимает значение переменной.

Как вы делаете то же самое с awk?

1 ответ

Решение

Вам нужно использовать двойные кавычки, чтобы он работал с переменными в оболочке:

sed "/$pattern/ s/^/#/" file.sql > file.commented

Вы также можете использовать встроенную функцию оболочки, чтобы сохранить изменения в самом файле ввода

sed -i.bak "/$pattern/ s/^/#/" file.sql

Однако лучше всего избегать sed для этой работы, так как он использует регулярное выражение и выше, команда сломается, если $pattern содержит / или некоторый специальный метасимвол регулярного выражения. Лучше использовать awk как это:

awk -v p="$pattern" 'index($0, p) {$0 = "#" $0} 1' file.sql > file.commented
Другие вопросы по тегам