SED删除行并从文件中替换为new

时间:2011-01-02 23:11:30

标签: sed

一直在查看SED文档但需要一个指向正确方向的小指针

我想要批量修改200个文件。 来源是html文件。 需要为更改创建新文件。

想要删除每个文件的第一部分直到第一个标记(这是20行左右,但可能略有不同)。 然后将源文件的内容(对于所有文件都相同)插入到从第1行开始的新目标文件中,大约30行。要插入的行数与删除的行数不匹配。

希望你能提供帮助。

保罗

2 个答案:

答案 0 :(得分:2)

这当然可以用sed(1)完成,但我可能会使用vanilla编辑器编辑(1)。

$ cat > bigfix.sh
for i in "$@"; do
  ed "$i" << \eof
1,/<tag>/-1d
0r otherfile.html
w
q
eof
done
$ sh bigfix.sh file*.html

此shell脚本接受参数并在每个arg上运行ed(1)。它删除从第一行开始的行,并在具有<tag>的行之前的行结束。然后它将otherfile.html置于顶部并写出结果。

答案 1 :(得分:0)

对于单个文件:

sed -e '1,/tag/{/tag/r insertfile' -e ';d}' inputfile > outputfile

对于许多文件:

find . -name 'criterion*.ext' -type f -exec sh -c 'sed -e "1,/tag/{/tag/r insertfile" -e ';d}" "{}" > "{}.new"' \;

修改

修复find命令以使用sh,因为重定向。请注意先前版本引用的更改。