查找、替换、删除 - 在文件中
Find, Replace, Remove - with in file
我目前正在使用此代码:
awk 'BEGIN { s = \"{$CNEW}\" } /WORD_MATCH/ { [=10=] = 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
中的新值更新该行
If $CNEW ='' then delete the line contained WORD_MATCH.
文件中只有一行包含 WORD_MATCH
谢谢
awk -v s="$CNEW" '/WORD_MATCH/ { n=1; if (s) [=10=]=s; else next; } 1; END { if(s && !n) print s }' file
工作原理
-v s="$CNEW"
这将创建 s
作为值为 $CNEW
的 awk 变量。请注意,-v
的使用巧妙地消除了尝试在 BEGIN 块中定义 s
时可能出现的引用问题。
/WORD_MATCH/ { n=1; if (s) [=16=]=s; else next; }
如果当前行匹配 WORD_MATCH
,则将 n
设置为 1
。如果 s
非空,则将当前行设置为 s
。如果不是,请跳过其余命令并从 next
行重新开始。
1
这对于打印行来说是神秘的 shorthand。
END { if(s && !n) print s }
在文件末尾,如果n
仍然不是1
且s
非空,则打印s
.
我目前正在使用此代码:
awk 'BEGIN { s = \"{$CNEW}\" } /WORD_MATCH/ { [=10=] = 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
中的新值更新该行
If $CNEW ='' then delete the line contained WORD_MATCH.
文件中只有一行包含 WORD_MATCH
谢谢
awk -v s="$CNEW" '/WORD_MATCH/ { n=1; if (s) [=10=]=s; else next; } 1; END { if(s && !n) print s }' file
工作原理
-v s="$CNEW"
这将创建
s
作为值为$CNEW
的 awk 变量。请注意,-v
的使用巧妙地消除了尝试在 BEGIN 块中定义s
时可能出现的引用问题。/WORD_MATCH/ { n=1; if (s) [=16=]=s; else next; }
如果当前行匹配
WORD_MATCH
,则将n
设置为1
。如果s
非空,则将当前行设置为s
。如果不是,请跳过其余命令并从next
行重新开始。1
这对于打印行来说是神秘的 shorthand。
END { if(s && !n) print s }
在文件末尾,如果
n
仍然不是1
且s
非空,则打印s
.