使用awk替换第一次出现的文本

San*_*lai 2 awk gawk

下面的代码替换了第一次出现的apple with banana.如何使用awk/gawk实现同样的目标?

sed -i "0,/apple/s//banana/" myfile.txt
Run Code Online (Sandbox Code Playgroud)

Ken*_*ent 5

这就是我提出的:

awk '!x{x=sub("apple","banana")}7' file
Run Code Online (Sandbox Code Playgroud)

例如:

kent$  cat f
foo
apple
foo
apple
apple

kent$  awk '!x{x=sub("apple","banana")}7' f
foo
banana
foo
apple
apple
Run Code Online (Sandbox Code Playgroud)

对于sed -i(就地更改)部分,如果你使用gawk 4.1.0,你也有这个选项.否则,你必须使用临时文件.

  • 好的,帮助其他人,另一种形式的命令使其更具可读性:`awk '!x{x=sub("apple","banana")}{print $0}' test`。将 {print} 替换为一个数字(除 0 以外的任何事物都是真),使 {print} 为真(甚至不写)。这个语法`!x{...}` 的意思是:如果x != false(即如果它有一个值)做某事。对于任何基本知识程序员来说,其余的应该是清楚的。 (3认同)