如果在一行中找到特定关键字,我想修改一行。
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。)