从多个目录中的多个文件(.cpp /.h)中删除特定行

时间:2015-01-19 15:15:06

标签: shell cygwin

我必须向某人发送代码,但在此之前,我需要删除包含已经参与此项目的不同开发人员名称的评论,我在网上查找结果,我发现了一个Shell脚本,如:

foreach file '(*cpp)'
sed -i "/\b\(Dave\|Alex\)\b/d" $file > tt
mv tt $file
end

但它不起作用,它会创建一个tt文件,但不会更改文件,下面是我得到的输出:

$ ./Test.sh
./Test.sh: line 2: foreach: command not found
sed: no input files
mv: missing destination file operand after ‘tt’
Try 'mv --help' for more information.
./Test.sh: line 5: end: command not found

我在通过Cygwin存在代码的主目录中运行此脚本。

2 个答案:

答案 0 :(得分:0)

您的脚本看起来更像是(t)csh脚本,而不是(ba)sh。试试这个:

for f in *.cpp; do
    mv $f $f.bak
    grep -v '(Dave)|(Alex)' $f.bak > $f
done

然后发送* .cpp(但不是* .cpp.bak)。

请注意,这是一种非常粗糙的方法。如果您在其中一个文件中有代码 其中有一个合法的Dave或Alex子串,那么这条线也会受到冲击。

答案 1 :(得分:0)

这对我有用,虽然我不得不改变扩展和字符串几次

for $(ls * .cpp)

中的文件

DO     sed' / Dave / d' $ file> TT

mv tt $ file

完成