如何在 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";
因此,转换后请仔细检查您的文件。