使用 sed 命令将 // 替换为 /* */

使用 sed 命令将 // 替换为 /* */

如何在 sed 命令中将 // 替换为 /* */ ?

我努力了:

sed -e "s/////* *//g" <<< filename

但这会导致替代命令中出现错误标志:'/'

有人知道怎么修这个东西吗?

答案1

$ echo '// //' | sed 's@//@/* */@g'
/* */ /* */

引用自man sed

[2addr]s/正则表达式/替换/标志

将替换字符串替换为模式空间中正则表达式的第一个实例。可以使用反斜杠或换行符以外的任何字符代替斜杠来分隔 RE 和替换。在 RE 和替换中,如果 RE 分隔符前面有反斜杠,则它本身可以用作文字字符。

答案2

在 sed 中,不需要使用/任何字符作为分隔符。使用:

sed 's://:/* */:g' < file

对于更新的问题,要将内联注释替换// comment为块注释/* comment */,请使用以下命令:

sed -E 's://(.*):/*\1*/:g' < file

括号定义了一个捕获组,然后用 引用\1

不过,这只适用于每一行,要合并连续的注释行,您可能需要一个比 sed 更好的解析器。

另请注意,这适用于简单的情况,但可能适用于某些输入,请考虑这样的代码会发生什么:

char *url = "https://example.com";

因此,转换后请仔细检查您的文件。

相关内容