Bash

如果使用 sed 找到關鍵字,則修改部分行?

  • March 31, 2015

如果在一行中找到特定關鍵字,我想修改一行。

CS_CODE, SM_NUM, PORT_NUM, DEV_PORT_NUM, DIRNUM, MAIN_DIRNUM, BILL_NO, ADR_NAME

在上述行中,如果存在“PORT_NUM”,則“BILL_NO”應替換為“NA”。僅應替換該行中存在的關鍵字。

我正在使用以下方法:

while IFS=$'\n' read -r line
do
    if [[ $line == *"$string"* ]]; then
          < sed command to replace only keyword >
    fi
done < "$file"

我怎樣才能做到這一點?

注意:’-i’ 擴展在我的 sed 版本中不起作用。

Menon,您已經得到瞭sed如何對整個文件進行操作的答案。如果您打算在單獨的行上工作,如您的程式碼框架中所示,那麼您不需要sed(或任何其他外部程序),因為您的 shell 可能(參見下面的註釋)進行替換。假設string您的程式碼中的變數包含(例如)值PORT_NUM,變數中的替換line可以通過以下方式完成:

while read line
do
    if [[ $line =~ $string ]]; then
          line=${line/BILL_NO/NA}
    fi
done < "$file"

(注意:此替換適用於當代 shell,如 bash、ksh、zsh。)

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