Sed 删除关键字和文本之间的空格

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

我有60个文件夹中的近300个文件

按照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实用程序。 GRP实用工具只在文件中找到模式。它不会被其他模式取代。如前所述,请参阅
    sed
    程序。我已经更新了我的问题。我需要任何linux命令来代替grep。您应该使用格式化程序,而不是像这样手动替换。目前可能是最常见的一种,几乎所有IDE都支持它。VisualStudio甚至默认包含clang格式。每个文件夹中的文件名都不同。所以出现了错误。我已经更新了我的问题。我建议您使用
    find
    实用程序:
    find-name“*.cpp”-exec sed。。。{} ... \;,这个网站上有很多例子。这种快速而肮脏的尝试还将匹配
    “用for()替换for()”
    查找(x)
    ,更麻烦的是:
    #为(x)
    定义内部,这将变成
    #为(x)
    定义内部。