Итак, у меня есть куча файлов в каталоге, и мне нужно вставить строку текста в каждый из них. По сути, они имеют следующий формат:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot /var/www/test1
ServerName test1.local
ServerAlias test1
<Directory "/var/www/test1">
Options All
AllowOverride All
</Directory>
</VirtualHost>
И я хотел бы вставить строку до закрытия
</ VirtualHost>тег. Мое первое предположение заключается в том, что я должен быть в состоянии сделать это с помощью sed, возможно, сопоставив и заменив этот тег. Я собираюсь начать пытаться сделать это сейчас, но если у кого-то есть существующий способ сделать это, я хотел бы услышать это.
text-processing
sed
Гейб.
источник
источник
Ответы:
Что-то вроде этого:
работает. Если вы хотите повторить эту команду для большого количества файлов, вы можете сделать что-то вроде:
Вероятно, лучше (но не проверено) благодаря @ChrisDown:
источник
/
для выражения sed, более понятен, так как вам не нужно избегать слэша:'s:</VirtualHost>:yourlinehere\n</VirtualHost>:'
Если вы не возражаете против Perl, попробуйте:
-i
Коммутатор будет сохранить старый файл с.old
расширением и печатью на текущий.источник
Вы также можете использовать «ex» (командная строка vi), если редактирование, которое вы хотите сделать, даже несколько сложнее. Например, вы хотите выполнить вставку только для одного экземпляра "".
Такой сценарий оболочки может работать:
Этот подход дает вам преимущества «бывшего»: поиск местоположения со сложными узорами и «движения курсора». Вы можете сделать такие вещи, как найти шаблон, а затем найти следующий экземпляр, затем сделать вставку. Или вы можете изменить текст, а не просто делать вставки. Или вы можете переключаться между диапазонами. Не забывайте, что «ex» позволяет вам использовать «.» как текущая строка, так., / ^ somepatter / s / blah / foo / будет работать.
источник
Вы можете использовать следующий однострочный код для вставки одной или нескольких строк в определенное место в файле, в вашем случае до «VirtualHost». Код в основном ищет имя файла (это может быть *. *, Если вы хотите вставить текст во все файлы) в данном каталоге и его подкаталогах. В найденных файлах он ищет шаблон «VirtualHost». Найдя шаблон, он заменяет его на первую строку \ nsecondline \ notherlines \ n \ VirtualHost. Обратите внимание, что «VirtualHost» является частью текста для замены, в противном случае мы потеряем его.
источник