【发布时间】:2015-10-06 06:27:00
【问题描述】:
我目前正在使用此代码:
awk 'BEGIN { s = \"{$CNEW}\" } /WORD_MATCH/ { $0 = s; n = 1 } 1; END { if(!n) print s }' filename > new_filename
要在WORD_MATCH 上找到匹配项,然后在名为filename 的文件中将该行替换为$CNEW,结果将写入new_filename
这一切都很好。但我有一个问题,我可能想删除该行而不是替换它。
所以我设置了$CNEW = '',它的工作原理是我在文件中得到一个空行,但实际上并没有删除该行。
无论如何调整 AWK 命令以允许删除该行?
总目标是:
如果文件中没有一行包含 WORD_MATCH,则添加一个,基于 $CNEW
如果文件中有一行包含 WORD_MATCH,则使用 $CNEW 中的新值更新该行
如果 $CNEW ='' 则删除包含 WORD_MATCH 的行。
文件中只有一行包含 WORD_MATCH
谢谢
【问题讨论】:
-
这个脚本不能像写的那样工作(除非它本身嵌入在你没有向我们展示的双引号中)因为
$CNEW不会在那里被评估。 awk 也不会喜欢该作业中未加引号的字符串。你的意思是{$CNEW}还是${CNEW}?{}文字值是否要进入文件? -
对不起,我应该说这是通过 php exec() 调用的