Bash Scripting: я хочу открыть набор файлов .php и добавить строку перед тегом html - PullRequest
2 голосов
/ 19 марта 2010

У меня есть набор файлов .php в папке, я хочу добавить текст непосредственно перед этими строками:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" >

Что я хочу, это вставить непосредственно перед этими строками в HTML-файл.Так что просто хотите добавить этот файл перед каждым объявлением docType.Однако объявление DOCTYPE никогда не находится в строке 1, так как раньше было множество строк php.

У меня есть текущий скрипт (где FE - папка, содержащая все скрипты, которые я хочу редактировать):

for file in ${fe}*; do
      echo "$file"
done

Спасибо,

Ответы [ 6 ]

6 голосов
/ 19 марта 2010
for file in ${fe}*; do
sed -i -e '/<!DOC/i Text to insert' "$file"
done
1 голос
/ 19 марта 2010
#!/bin/bash
shopt -s nullglob
text2add="my text to add"
for file in *.php
do
  if [ -f "$file" ];then
     sed -i.bak "/<\!DOCTYPE/ i $text2add" $file
  fi
done

Или просто

text2add="my text to add"
sed -i.bak "/<\!DOCTYPE/ i $text2add" *.php

Если вы хотите сделать это рекурсивно

find . -iname "*.php" -exec  sed -i.bak "/<\!DOCTYPE/ i $text" "{}" +;
0 голосов
/ 19 марта 2010

Попробуйте это в perl:

perl -i.bak -p -e 's/\<\!DOCTYPE/text to replace\<\!DOCTYPE/ig' *.php

Этот однострочник изменит все ваши php-файлы, заменив <!DOCTYPE на что угодно + <!DOCTYPE - вы хотите вернуть его обратно (-: Это также создаст резервную копию всех измененных файлов с расширением .bak, так что вы увидите файлы «.php.bak» после того, как запустите это.

i относится к регистронезависимому, а g является глобальным, то есть заменяет все в файле. Я предполагаю, что есть только один, и это имеет тот же случай, так что вы можете спокойно опустить "ig" в конце.

0 голосов
/ 19 марта 2010

Вот мое предложение.Предполагается, что ваш текст для вставки находится в файле с именем mytextfile.

for file in ${fe}*; do
    awk '/!DOCTYPE/{printf"%s\n",text;}{print}' text="`cat mytextfile`" $file \
        > /tmp/out
    mv /tmp/out $file
done
0 голосов
/ 19 марта 2010
echo "line" | cat - yourfile > /tmp/out && mv /tmp/out yourfile

взято отсюда: http://www.cyberciti.biz/faq/bash-prepend-text-lines-to-file/

0 голосов
/ 19 марта 2010
for file in ${fe}*; do 
    mv $file temp
    echo "YOUR STRING" > $FILE
    cat temp >> $FILE;
done
...