如何解决删除关键字和括号之间的空格
我在60个文件夹中有将近300个文件。
根据C ++编码准则,我需要替换* .cpp和* .cl文件中的以下行(希望删除 if 和 for 语句之间的多余空间) )-
for (* .....)
使用
for(* .....)
还有
if (* .....)
使用
if(* .....)
任何人都可以建议我 grep 命令来搜索并替换所有文件。
已编辑:
我尝试了以下命令:
sed -i 's/for (/for(/g' *.cpp
但是出现了错误,如下所示:
sed: can't read *.cpp: No such file or directory
解决方法
我认为您需要 sed 命令(流编辑器,请参见mashine上的 File "<stdin>",line 2
SyntaxError: cannot assign to operator
)。更适合文件编辑。
man sed
让我解释一下:
-
sed -i -E 's/(for|if)[ ]+(\(.*\))/\1\2/g'
代表 inline ,这意味着所有更改都将完成并保存在文件中
-
-i
需要与sed一起使用扩展的正则表达式 -
-E
-
s/(for|if)[ ]+(\(.*\))/\1\2/g
代表替代 -
s
是分隔符,用于分隔命令的不同部分。在第一个和第二个之间,需要找到(然后替换)模式。在第二个和第三个之后,我们希望在替换之后有这个东西。
最后, -
/
代表 global ,这意味着要对整个文件进行更改。
-
如何应用于所需的每个文件?
This question已经存在,所以最后您需要在目录中运行,并按照命令存储文件
g
我希望这会有所帮助:)
,我创建了文件“ brol.txt”,内容如下:
for (correct
for(wrong
if (correct
if(wrong
我启动了以下grep命令:
grep -E "for \(|if \(" brol.txt
结果如下:
for (correct
if (correct
说明:
grep -E means extended grep (allows to search for expression1 OR expression2,separated by a pipe character)
\( means the search for a round bracket. The backslash is an escape character.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。