Использование sed для вставки текста в файл - PullRequest
3 голосов
/ 13 февраля 2012

Я пытаюсь использовать SED для внесения некоторых изменений в файл конфигурации CUPS.

Я хочу найти следующий текст:

# Restrict access to the server...
<Location />
  Order allow, deny

и добавить его кэто:

  Allow from all

Я пробовал sed '/# Restrict access to the server...\n<Location />\n Order allow, deny\n/ a\ Allow from all' etc/cups/cupsd.conf, но я не знаю, как выйти из>, и добавление к нему обратной косой черты не работает.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2012

Это будет работать для вас:

sed 'N;/<Location \/>\n *Order allow, deny/s//&\n  Allow from all/;P;D' file

или альтернативно

sed $'N;/<Location \\/>\\n *Order allow, deny/a\\\nAllow from all\nP;D;' file

Пример

$ sed 'N;/<Location \/>\n *Order allow, deny/s//&\n  Allow from all/;P;D' cups.in
# other stuff here
# Restrict access to the server...
<Location />
  Order allow, deny
  Allow from all
</Location>
stuff

$ sed $'N;/<Location \\/>\\n *Order allow, deny/a\\\n  Allow from all\nP;D;' cups.in
# other stuff here
# Restrict access to the server...
<Location />
  Allow from all
  Order allow, deny
</Location>
stuff

Обратите внимание, что порядок добавления Allow from all отличается, хотя я не верю, что это немного отличает функциональность.

0 голосов
/ 13 февраля 2012

Это может работать для вас:

sed '/# Restrict access to the server/{$!N;$!N;s/<Location \/>\n  Order allow, deny$/&\n  Allow from all/}' file

или это:

sed ':a;$!{N;ba};s/# Restrict access to the server[^\n]*\n<Location \/>\n  Order allow, deny[^\n]*/&\n  Allow from all/' file

или, скорее всего, это (GNU awk?):

sed '/# Restrict access to the server/,+3s/Order allow, deny/&\n  Allow from all/' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...