Добавление строки текста в несколько файлов

Renjith, нет никакой "корневой" операционной системы. История операционных систем является довольно долгой. Я просто рекомендовал бы Вам прочитать следующие статьи о Википедии:

Весело проведите время, это - действительно интересный материал...

10
26.04.2011, 01:44
4 ответа

Что-то вроде этого:

sed 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/'

работы. Если Вы хотите повторить эту команду на большом количестве файла, можно сделать что-то как:

for i in *; do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' "$i"; done

Вероятно, лучше (но непротестированный) благодаря @ChrisDown:

find . -type f -print0 | while IFS= read -r -d '' filename;\
do sed -i 's/<\/VirtualHost>/yourlinehere\n<\/VirtualHost>/' $filename;\ 
done
10
27.01.2020, 20:01
  • 1
    , потрясающий... это, что я искал. –  gabe. 24.08.2010, 22:29
  • 2
    Не анализируйте ls. Используйте шарик вместо этого. mywiki.wooledge.org/ParsingLs –  Chris Down 14.11.2011, 17:36
  • 3
    Вы - rigth @ChrisDown. Улучшите мой ответ. –  lcipriani 23.11.2011, 16:14
  • 4
    Выбор другого символа, чем / поскольку sed выражение является более чистым, так как Вы не должны выходить из наклонной черты: 's:</VirtualHost>:yourlinehere\n</VirtualHost>:' –  Alexander 28.06.2013, 14:06

Если Вы не возражаете против попытки Perl:

perl -pi'*.old' -e 's(</VirtualHost>(Your stuff here\n</VirtualHost>)' myfile

-i переключатель сохранит Ваш старый файл с a .old расширение и печать к текущей.

2
27.01.2020, 20:01

Можно также использовать "исключая" (командная строка vi), если редактирование Вас хочет сделать, является даже несколько сложным. Например, Вы только хотите сделать вставку для на одном экземпляре "".

Сценарий оболочки как это может работать:

for FILENAME in *.whatever  # Need a criteria to glob, or a list of names
do
    ex -s $FILENAME << END_EDITS
/^<\/VirtualHost>/
O " capital-o, not zero
text to insert goes here
.
w!
q
END_EDITS
done

Этот подход дает Вам преимущества "исключая": нахождение местоположения с тщательно продуманными шаблонами и 'перемещений курсора'. Можно сделать, вещам нравится, находят шаблон, затем находят следующий экземпляр, ЗАТЕМ сделайте вставку. Или можно изменить текст, вместо просто выполнения вставляет. Или можно измениться между диапазонами. Не забывайте, что "исключая" позволяет Вам использовать "." в качестве текущей строки, таким образом.,/^somepatter/s/blah/foo/будет работать.

2
27.01.2020, 20:01

Можно использовать следующий однострочный код для вставки одной строки или нескольких строк в данное местоположение в файле в Вас случай перед 'VirtualHost'. Код в основном ищет имя файла (это могло быть *. *, если Вы хотите вставить тексты во все файлы) в рамках данного каталога и его подкаталогов. В найденных файлах это ищет шаблон 'VirtualHost'. После того, как это нашло шаблон, это заменяет его firstline\nsecondline\notherlines\n\VirtualHost. Обратите внимание, что 'VirtualHost' является частью текста для замены, иначе мы будем потеря это.

find directory/ -name filename -print | xargs sed -i 's|VirtualHost|firstline\nsecondline\notherlines\nVirtualHost|g'
0
27.01.2020, 20:01

Теги

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