我有一个代码:
1 /**
2 a b c
3 **/
4 int main() {
5 int x;
6 if ( condition) {
7 return x;
8 }
9 }
我需要将标记或字符串之间的多个空格更改为单个空格,例如在第7行中,但是注释(第2行)不应受到影响,也不应该在代码中使用前导制表符。因此,输出应为:
1 /**
2 a b c
3 **/
4 int main() {
5 int x;
6 if ( condition) {
7 return x;
8 }
9 }
我尝试使用'tr':~$ tr -s " " < file
但是它更改了第2行以及将第5行中的前导制表符更改为第8行。可以使用sed
吗?
会走多远
sed -rn '\#/\*\*#,\#\*\/*# {p;b}; s/([^ ]) +/\1 /g; p' file
我懂了?它打印未修改的注释行(尽管不能在同一行中处理注释的开/关),并跳过脚本的其余部分。对于未注释的行,它将非空格字符(因此行缩进超出范围)后的任何多个空格压缩到单个空格。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句