Добавить строку в начало строки, содержащей шаблон
Я пытаюсь комментировать строки в моих сценариях, где присутствует шаблон из данного списка шаблонов. Теперь я могу сделать это следующим образом в командной строке:
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