如果使用 sed 找到关键字,修改部分行?

如果使用 sed 找到关键字,修改部分行?

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

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 版本中不起作用。

答案1

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。)

相关内容