Интерактивный динамический хвост из нескольких файлов с вкладками?

Используйте

sed '/#start/,/#end/replace_command'

Например, если файл называется myconfig , и вы хотите заменить "разрешить "с" запретить "в этом разделе можно сказать

sed '/#start/,/#end/s/allow/deny/' myconfig

. Это оставит файл нетронутым и отобразит в стандартном выводе , как файл будет выглядеть после модификации. Вам, вероятно, следует сделать это в первую очередь, чтобы убедиться, что вы правильно поняли команду. Если вы действительно хотите изменить файл, добавьте параметр -i :

sed -i '/#start/,/#end/s/allow/deny/' myconfig

Если вы хотите заменить весь текст ( все текст) между этими двумя строками, вы можете сделать что-то более простое, чем ответ Лукаса :

sed '/#start/,/#end/c\
New text line 1\
New text line 2\
        ︙      \
New text line n-1\
New text line n (last)'                                   ← Close quote; no backslash here

c это c hange в sed ed ); это означает «заменить всю строку (строки)». Нельзя просто оставить строки #start и #end нетронутыми. Если вы хотите сохранить их, вы должны снова вставить их:

sed -i '/#start/,/#end/c\
#start\
FirewallRuleSet global {\
    FirewallRule allow tcp to google.com\
    FirewallRule deny tcp to facebook.com\
                      ︙                 \
\
#more rules\
}\
#end' myconfig

/ # start /, / # end / указывает диапазон - строки из первой строки, содержит #start через первую строку после той, которая содержит #end . Если вам нужно найти строки, содержащие эти строки и ничего больше, используйте / ^ # start $ /, / ^ # end $ / .

4
25.09.2015, 21:53
0 ответов

Теги

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