В vim
, можно сделать:
:%s/<head\b[^>]*>/& <meta foo="bar">/g
Вы могли также сделать это в GNU sed
, который возможно больше соответствовал бы:
for file in *.html; do
sed -i 's/<head\b[^>]*>/& <meta foo="bar">/g' "$file"
done
Будьте осторожны, -i
символьные ссылки повреждений.
sed -i '/PATTERN/ a\
Line which you want to append' filename
для этого примера
sed -i '/<HEAD>/a <meta>' test.txt
<HEAD>
<HEAD>
Результат:
<HEAD>
<meta>
</HEAD>
Вышеупомянутая команда добавит новую строку после того, как строка будет подобрана. Однако это даст неправильный результат, если файл будет иметь входную строку как
<HEAD><TITLE></TITLE>
</HEAD>
Результат:
<HEAD><TITLE></TITLE>
<meta>
</HEAD> //which is wrong.
Может быть мы можем попробовать этот подход:
sed -i 's/<HEAD>/<HEAD><meta>/' filename
<head><foo>
законно в HTML, таким образом, это не будет работать как ожидалось, если такое условие будет существовать. Например, это привело бы к <head><foo>\n<meta ...>
в таком случае.
– Chris Down
25.12.2012, 15:35
sed -i.bkp
это отредактирует исходные файлы и также возьмет резервное копирование в качестве filename.bkp – Rahul Patil 25.12.2012, 15:43header
теги также. Заставьте его соответствовать, только если “голова” заканчивает на границе слова. – manatwork 25.12.2012, 15:50