使用一行 sed 命令在行尾替换和添加

使用一行 sed 命令在行尾替换和添加

我有一行如下

 // Testing this

我正在尝试使用 sed 命令将每行上的 // 替换为 /* (中间的句子或单词)*/ 。

所以它应该看起来像这样

/* Testing this */

第一部分很容易调用

sed 's#//#/*#'

但是,在第二部分中,我尝试了这个解决方案

使用 sed 在行尾附加单词[重复]

我尝试使用-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

内容如下:

  • 如果该行包含模式//,那么
    • 将匹配的文本替换为/*
    • 然后将行尾的空字符串替换为*/

相关内容