awk -i inplace '
BEGIN {FS=" "}
BEGINFILE {changed=0}
{ print;if ($1 == "namespace" && !changed) {print "foo";changed=1} }
' *
有更优雅的方法吗?我错过了一些内置的构造?我正在运行GNU Awk 4.1.0(我非常高兴-i inplace)。
答案 0 :(得分:1)
你可以说:
... -F' ' '$1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' file
甚至:
... -F' ' '$1 == "namespace" && !_ {$0=$0 RS "foo";_=1}1' file
正如上面的评论中所提到的,这与你所写的非常类似,只是它使用RS
变量来插入文本。
为了对多个文件执行此操作,您需要重置变量:
... -F' ' 'BEGINFILE {a=0} $1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' *
或
... -F' ' 'FNR==1 {a=0} $1 == "namespace" && !a {$0=$0 RS "foo";a=1}1' *
答案 1 :(得分:1)
awk -i inplace '$1=="namespace" && !seen[ARGIND]++ {$0=$0 ORS "foo"} 1' *
FS=" "
是默认值,无需明确指定。