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

Removing Specific Line from Multiples files (.cpp /.h) in multiple directories

我必须将代码发送给某人,但在此之前我需要删除评论,其中包含从事该项目的不同开发人员的姓名,我在网上查找结果,我找到了一个 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 存在。

您的脚本看起来更像 (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 子字符串,那么这样的行也将被清除。

这对我有用,尽管我不得不多次更改扩展名和字符串

$(ls *.cpp) 中的文件

做 sed '/Dave/d' $文件 > tt

mv tt $文件

完成