Linux

sed + 在雙引號內設置值

  • October 22, 2019

文件是這樣的

more /etc/sysconfig/chronyd
# Command-line options for chronyd
OPTIONS=""

我們需要在-4裡面設置值""

該文件如下所示,

# Command-line options for chronyd
OPTIONS="-4" 

我們可以使用 sed 作為

sed -i s'/OPTIONS=""/OPTIONS="-4"/g' /etc/sysconfig/chronyd

但這不是很好的選擇,因為(如果雙引號內有空格)

例如,

more /etc/sysconfig/chronyd
# Command-line options for chronyd
OPTIONS=" "

在 RE 上使用sed定址:

sed -e '/^OPTIONS=/s/.*/OPTIONS="-4"/' /etc/sysconfig/chronyd

意思是:

  • 在匹配^OPTIONS=的行上(從 開始OPTION=),

    • 所有內容替換為OPTIONS="-4".

以下應該工作,

  • 如果space可選的,
sed -r 's/OPTIONS="[[:space:]]?"/OPTIONS="-4"/g'
  • 如果space至少一個或多個
sed -r 's/OPTIONS="[[:space:]]+"/OPTIONS="-4"/g'

或兩種可能

$$ As mentioned by @AdminBee $$,

  • 如果space至少一個或多個可選的,
sed -r 's/OPTIONS="[[:space:]]*"/OPTIONS="-4"/g'

例如,

[arif@arif]$ printf '# Command-line options for chronyd\nOPTIONS=" "\n'
# Command-line options for chronyd
OPTIONS=" "
[arif@arif]$ printf '# Command-line options for chronyd\nOPTIONS=" "\n' | sed -r 's/OPTIONS="[[:space:]]"/OPTIONS="-4"/g'
# Command-line options for chronyd
OPTIONS="-4"

引用自:https://unix.stackexchange.com/questions/548113