使用 sed 修复 && 运算符的格式

Fix formatting of && operator with sed

我正在尝试编写一个 sed 命令,将一个 space 添加到 && (AND) 运算符的任一侧。这是我目前所拥有的:

sed -E 's+(\&\&)|(\s*\&\&\s*)+ & +g test.c

&& 周围没有 space 的第一个条件有效,所以

if(numberIn==0&&char=='g')

变成

if(numberIn==0 && char=='g')

但是第二个条件1个或多个spaces不成立。所以这个

if(numberIn==0  &&   char=='g')

不变。

\s*OPERATOR\s* 的模式适用于其他二元运算符,因此我不确定为什么它不适用于 and 运算符。我是否遗漏了关于在 and 运算符上使用 sed 的内容?对于第一个条件,我注意到如果将其替换为“&&”,您实际上会得到“&& &&”,这就是替代模式为“&”的原因。 (OR 或 EQUALS 运算符不是这种情况)。

如有任何提示,我们将不胜感激。

& 在 sed 替换中表示 "insert the matched string".

使用\&插入一个文字符号:

$ echo 'foo   && bar' | sed -E 's+(\&\&)|(\s*\&\&\s*)+ \&\& +g'
foo && bar

PS: 获取格式化为 clang-format 的真实代码。