sed: 更新字串、如果沒找到該字串就新增一行

前言

  • 之前為了調整網卡設定,特別用以下提到的方式,更新參數
  • 會用 function 的方式增加重用性



說明

  • 主要指令如下
1
2
3
grep -q '^option' file \
  && sed -i 's/^option.*/option=value/' file \
  || echo 'option=value' >> file

參數說明

  • grep
    • -q : 不回傳找到的結果
  • sed
    • -i : 立即取代目標檔案
    • 引號中的 s : 代表取代,語法是 's/原始內容/更新內容/'

指令說明

  • 如果在指定檔案中有找到「option 開頭的字串」,就用「option=value」此字串取代原有的 「option」字串;
  • 如果沒有找到,改用新增「option=value」在指定檔案中的最後一行

修改範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 將上面提到的指令改寫成函數,方便重複使用
add_setting (){
  TARGET_FILE=$1
  OPTION=$2
  VALUE=$3
  grep -q "^$OPTION" $TARGET_FILE && sed -i "s/^$OPTION.*/$OPTION=$VALUE/" $TARGET_FILE || echo "$OPTION=$VALUE" >> $TARGET_FILE
}


# 因此,修改網卡的工作就變成
add_setting $IF_FILE_PATH IPADDR  192.168.0.123
add_setting $IF_FILE_PATH GATEWAY 192.168.0.254
# 假設網卡檔案路徑已經存在 $IF_FILE_PATH 變數中



REF {#ref}:

Licensed under CC BY-NC-SA 4.0
最後更新 2024-09-20 05:48

主題 StackJimmy 設計