Bash Scripting:我想打开一组.php文件,并在html标签之前添加一行

问题描述 投票:2回答:6

我在文件夹中有一组.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

谢谢,

bash shell editing
6个回答
1
投票
#!/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" "{}" +;

6
投票
for file in ${fe}*; do
sed -i -e '/<!DOC/i Text to insert' "$file"
done

0
投票
echo "line" | cat - yourfile > /tmp/out && mv /tmp/out yourfile

取自这里:http://www.cyberciti.biz/faq/bash-prepend-text-lines-to-file/


0
投票

这是我的主张。它假定您要插入的文本位于名为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
投票
for file in ${fe}*; do 
    mv $file temp
    echo "YOUR STRING" > $FILE
    cat temp >> $FILE;
done

0
投票

在perl中试试这个:

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

这个单行将修改你所有的PHP文件,用你想要的任何东西替换<!DOCTYPE + <!DOCTYPE - 你想把它放回去( - :这也将备份所有修改后的文件,扩展名为.bak,所以你会运行此命令后,请参阅“.php.bak”文件。

i指的是不区分大小写,g是全局的,即替换文件中的all。我假设只有一个,它有相同的情况,所以你可以安全地省略最后的“ig”。

© www.soinside.com 2019 - 2024. All rights reserved.