我在文件夹中有一组.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
谢谢,
#!/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" "{}" +;
for file in ${fe}*; do
sed -i -e '/<!DOC/i Text to insert' "$file"
done
echo "line" | cat - yourfile > /tmp/out && mv /tmp/out yourfile
取自这里:http://www.cyberciti.biz/faq/bash-prepend-text-lines-to-file/
这是我的主张。它假定您要插入的文本位于名为mytextfile
的文件中。
for file in ${fe}*; do
awk '/!DOCTYPE/{printf"%s\n",text;}{print}' text="`cat mytextfile`" $file \
> /tmp/out
mv /tmp/out $file
done
for file in ${fe}*; do
mv $file temp
echo "YOUR STRING" > $FILE
cat temp >> $FILE;
done
在perl中试试这个:
perl -i.bak -p -e 's/\<\!DOCTYPE/text to replace\<\!DOCTYPE/ig' *.php
这个单行将修改你所有的PHP文件,用你想要的任何东西替换<!DOCTYPE
+ <!DOCTYPE
- 你想把它放回去( - :这也将备份所有修改后的文件,扩展名为.bak,所以你会运行此命令后,请参阅“.php.bak”文件。
i指的是不区分大小写,g是全局的,即替换文件中的all。我假设只有一个,它有相同的情况,所以你可以安全地省略最后的“ig”。