linux 使用sed注解多行

uemypmqf  于 2023-02-07  发布在  Linux
关注(0)|答案(2)|浏览(233)
@{string}
    ${one_char}
    set another variable

我有一个这样的日志文件,我想在一个sed命令中用“#”注解上面的所有行。
我用的是sed "/^\s*{string}$/ s|^|#|; /^\s*log/, /);$/ s|^|#|",但是不行。
我希望从下面开始评论所有模式

@{string}
    ${one_char}
    set another variable
y1aodyip

y1aodyip1#

试试看

#!/bin/bash

sed -i "s/\(@{string}\)/#\1/; s/\(\${one_char}\)/#\1/; s/\(set another variable\)/#\1/" input.txt
  • 所有三个部分的工作相同。
  • s/SOMETHING/#SOMETHING/
  • 必须在sed中反斜杠$,以便将其视为文本。
  • 你必须反斜线括号。
  • 注意,如果你运行它多次,它将添加一个#来再次注解该行。2例如,如果你运行它3次,它将产生###@{string}
  • 如果您介意#不是该行的第一个字符,则可以在sed "s///"的前几部分添加空格。
ih99xse1

ih99xse12#

这可能对您有用(GNU sed):

sed -E 's/^(\s*[@$]\{\w+\}|(\s*\w+){3})$/#&/' file

打开扩展正则表达式-E
尝试混合使用类等价、交替和反向引用来匹配这三个表达式,如果成功,则在前面添加#
如果要在上面的示例中完全成功匹配,请使用:

sed -E 's/^(\s+(@\{string\}|\$\{one_char\}|set another variable))$/#&/' file

相关问题