我有一行如下
// Testing this
我正在尝试使用 sed 命令将每行上的 // 替换为 /* (中间的句子或单词)*/ 。
所以它应该看起来像这样
/* Testing this */
第一部分很容易调用
sed 's#//#/*#'
但是,在第二部分中,我尝试了这个解决方案
我尝试使用-e
它给了我一个“未终止的命令”错误。然后,我尝试用分号来使其成为一个,所以它类似于
's#//#/*#;#//#s#/$#*/#'
但似乎所做的只是第一部分(替换//
为/*
)而不是第二部分(将 a 放在*/
同一行的末尾)。
我做错了什么?任何指示将不胜感激。
答案1
怎么样
$ cat testfile
// Testing this
foobar
$ sed 'sx//\(.*\)x/*\1 */x' testfile
/* Testing this */
foobar
$
sx//
:搜索包含以下内容的行//
\(.*\)x
:将线的剩余部分放入捕获组 1/*\1 */x
:将行的剩余部分替换为/*
(注释开始,C 风格),后跟捕获组 1 的内容(引用为\1
),然后是*/
(注释结束,C 风格)
答案2
另一种方法:使搜索和替换以注释完全匹配为条件:
sed '\!//! {s!!/*!; s!$! */!}' file
内容如下:
- 如果该行包含模式
//
,那么- 将匹配的文本替换为
/*
- 然后将行尾的空字符串替换为
*/
- 将匹配的文本替换为