【问题标题】:replace first occurrence of text using awk使用 awk 替换第一次出现的文本
【发布时间】:2013-08-14 08:14:02
【问题描述】:

下面的代码将第一次出现的苹果替换为香蕉。 我如何使用 awk / gawk 达到同样的效果?

sed -i "0,/apple/s//banana/" myfile.txt

【问题讨论】:

    标签: awk gawk


    【解决方案1】:

    这是我想出的:

    awk '!x{x=sub("apple","banana")}7' file
    

    例如:

    kent$  cat f
    foo
    apple
    foo
    apple
    apple
    
    kent$  awk '!x{x=sub("apple","banana")}7' f
    foo
    banana
    foo
    apple
    apple
    

    对于sed -i(原地更改)部分,如果您使用 gawk 4.1.0,您也有该选项。否则,您必须使用临时文件。

    【讨论】:

    • 您使用的是7。那很好笑! :) +1
    • @hek2mgl 如果我用1,你可以+1,现在我用7,你应该+7 :) 没有什么特别的原因,我喜欢这个数字..
    • @MohammedNoureldin 因为非零数字在 awk 中执行默认操作:打印
    • @MohammedNoureldin 没有区别。我更喜欢右手食指,所以我选择了 7
    • OK 帮助其他人,另一种形式的命令使其更具可读性:awk '!x{x=sub("apple","banana")}{print $0}' test。将 {print} 替换为数字(0 以外的任何值都为真),使 {print} 为真(甚至不写)。这个语法!x{...} 的意思是:如果 x != false(即如果它有一个值)做某事。对于任何基本知识程序员来说,其余的都应该是清楚的。
    猜你喜欢
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 2017-09-10
    • 1970-01-01
    • 2016-12-15
    • 2011-08-01
    相关资源
    最近更新 更多