2

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

谢谢,

4

6 回答 6

6
for file in ${fe}*; do
sed -i -e '/<!DOC/i Text to insert' "$file"
done
于 2010-03-19T10:25:55.630 回答
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" "{}" +;
于 2010-03-19T10:27:43.583 回答
0

在 perl 中试试这个:

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

这个单行程序将修改您所有的 php 文件,替换<!DOCTYPE为您想要的任何内容 + <!DOCTYPE- 您想将其放回 (-: 这还将备份所有修改后的文件,扩展名为 .bak,因此您将看到" .php.bak”文件运行后。

i 表示不区分大小写,g 是全局的,即替换文件中的所有内容。我假设只有一个,并且它具有相同的情况,因此您可以放心地在最后省略“ig”。

于 2010-03-19T19:01:47.227 回答
0
for file in ${fe}*; do 
    mv $file temp
    echo "YOUR STRING" > $FILE
    cat temp >> $FILE;
done
于 2010-03-19T10:14:13.727 回答
0
echo "line" | cat - yourfile > /tmp/out && mv /tmp/out yourfile

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

于 2010-03-19T10:16:21.030 回答
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
于 2010-03-19T10:37:14.420 回答