如果没有 sed 模式回显>>换行符



我正在使用 sed替换conf的行:

sed -i.bak 's/^option.*/option newparam/' somefile.conf

如果我的选项行不存在某个文件中,我该如何告诉 sed插入或返回false?

最后我结束了:

sed -i.bak "s/^#$STR.*|^# $STR.*|^$STR.*/$OPT/" $FILE && grep -q "^$OPT" $FILE || echo "$OPT" >> $FILE

option开头的删除行(s),append( aoption newparam到文件的最后一行( $

sed -i.bak '/^option/d; $ aoption newparam' somefile.conf

注意:既然您说要插入新行,如果option行不存在,我认为新线所在的位置无关紧要。

使用GREP使用Double Pipe Operator ||检查该行是否首先存在。如果第一个命令返回true,并且仅在第一个失败时执行第二个命令,则该操作将是简短的。

grep -q '^option.*' file.txt || echo 'option newparam' >> file.txt

-q选项抑制GREP的输出,而||操作员仅执行echo命令,如果grep命令失败,那就是$?不是0。一个简单的例子:

$ cat file.txt
line 1
line 2 
line 3
$ grep -q 'line 4' file.txt || echo 'line not in file'
line not in file

特殊变量$?包含从上一个命令中的退出值。

$ grep -q 'line 4' file.txt 
$ echo $?
1
$ grep -q 'line 3' file.txt 
$ echo $?
0

您可以在gnu sed中这样做,保留选项顺序:

/^otheroption.*/ {
  s//otheroption newparam/       # Insert newparam
  h                              # and remember it in HS
}
$ {
  x                              # Check if option
  /^otheroption/! {              # was replaced,
    x                            # if not append it
    s/$/notheroption newparam/  # to the last line 
  }
}

全部一行:

sed '/^option.*/ { s//option newparam/; h; }; $ { x; /^option/! { x; s/$/noption newparam/; }; }' somefile.conf

相关内容

  • 没有找到相关文章

最新更新