Sed 删除关键字和文本之间的空格
我有60个文件夹中的近300个文件Sed 删除关键字和文本之间的空格,sed,grep,Sed,Grep,我有60个文件夹中的近300个文件 按照C++编码准则,我需要替换*.CPP和*.CL文件的下面行(希望在 > > < 语句> -> /P>之间删除额外的空间 与 for(* .....) if(* .....) 而且 if (* .....) 与 for(* .....) if(* .....) 任何人都可以建议我使用grep命令来搜索和替换所有文件 编辑: 我尝试了以下命令: sed -i 's/for (/for(/g' *.cpp 但是得到了错误如下所示: sed: can
按照C++编码准则,我需要替换*.CPP和*.CL文件的下面行(希望在<强> ><强> > <强> < <强>语句> -> /P>之间删除额外的空间 与
for(* .....)
if(* .....)
而且
if (* .....)
与
for(* .....)
if(* .....)
任何人都可以建议我使用grep命令来搜索和替换所有文件
编辑:
我尝试了以下命令:
sed -i 's/for (/for(/g' *.cpp
但是得到了错误如下所示:
sed: can't read *.cpp: No such file or directory
我创建了文件“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.
我认为您需要sed命令(流编辑器,请参阅mashine上的
mansed
)。它更适合于文件编辑
sed-i-E的/(对于| if)[]+(\(.*)/\1\2/g'
让我解释一下:
-i
代表内联,这意味着所有更改都将完成并保存在文件中-E
需要在sed中使用扩展正则表达式
s/(对于| if)[]+(\(.*)/\1\2/g
代表替代品s
是分隔符,用于分隔命令的不同部分。在first/和second/之间,需要找到(然后替换)模式。在第二次/第三次/换人后我们想要的/
在末尾代表全局,这意味着对整个文件进行更改g
find./-type f-exec sed-i-E's/(for | if)[]+(\(.*)/\1\2/g'{};
我希望,这将有所帮助:)如果您需要/想要专门使用grep,那么这个问题可能更适合。也就是说,有很多代码美化工具可以自动地完成这类工具,而不必编写一组正则表达式,你可以考虑使用<代码> SED实用程序。
sed
程序。我已经更新了我的问题。我需要任何linux命令来代替grep。您应该使用格式化程序,而不是像这样手动替换。目前可能是最常见的一种,几乎所有IDE都支持它。VisualStudio甚至默认包含clang格式。每个文件夹中的文件名都不同。所以出现了错误。我已经更新了我的问题。我建议您使用find
实用程序:find-name“*.cpp”-exec sed。。。{} ... \;代码>,这个网站上有很多例子。这种快速而肮脏的尝试还将匹配“用for()替换for()”
和查找(x)
,更麻烦的是:#为(x)
定义内部,这将变成#为(x)
定义内部。