2012-03-31 23 views
2

我有一个sed脚本在文件中找到的关键字“MYWORD”之前插入一行。我的脚本如下:在脚本中的多个文件上使用sed

sed -e '/MYWORD/ i\MY NEW LINE TO BE INSERTED' <inputFilename >outputFilename 

因为这只会在只有一个文件,我怎样才能改变我的剧本有这个插入会出现在目录中的每个文件发生?

+0

你是说你的示例代码实际上*工作*在单个文件上? – Graham 2012-04-01 04:10:43

回答

1

正如nosid所说,您可以使用-i选项来编辑文件。阅读您的操作系统中的手册页,以确定如何使用-i。然后你就可以在shell脚本识别和行为上的文件一点点包裹SED:

for this in foo*.txt; do 
    sed -i'' -e 'your-sed-script' "$this" 
done 

这就是说,我不知道您的插入方法将工作,或至少可靠地工作。我在FreeBSD和OS X上测试过,它根本不起作用。我插入行的正常策略是使用awk,而不是。因此(举例来说):

for this in foo*.txt; do 
    awk '/MYWORD/{print "Extra line of text goes here."} 1' "$this" > "$this.$$" 
    mv "$this.$$" "$this" 
done 

awk的线这里搜索/ MYWORD /(扩展正则表达式,而sed默认为基本正则表达式)。如果发现它,它首先打印“额外”文本。然后,“1”评估为“真”,也将打印当前行。效果是在MYWORD之前的行上插入“额外”文本。

请注意,这不是好的脚本。这是浪费,管道和重命名尚未修改的文件。您可以通过选择“mv”临时文件(取决于awk的退出值)来改进它,也可以使用cmp来确定文件是否已更改,然后清理剩余的临时文件等等。 。