我有一个sed脚本,可以在文件中找到关键字“MYWORD”之前插入一行。我的脚本如下:
sed -e '/MYWORD/ i\MY NEW LINE TO BE INSERTED' <inputFilename >outputFilename
由于这只会在一个文件上发生,我如何更改脚本以在目录中的每个文件上进行此插入?
答案 0 :(得分: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”评估为“true”,也将打印当前行。效果是在MYWORD之前的行上插入“Extra”文本。
请注意,这不是好的脚本。这是浪费,管道和重命名尚未修改的文件。您可以通过选择根据awk的退出值选择“mv”临时文件来改进它,或者您可以使用cmp
来确定文件是否已更改,然后清理剩余的临时文件等...但是它明白了。