【问题标题】:Multiple substitute commands when matching some lines in sed匹配 sed 中的某些行时的多个替换命令
【发布时间】:2016-06-11 14:02:57
【问题描述】:

使用 Vim 的全局命令,可以在匹配某些行时用|(管道)符号链接多个命令,例如:

g/match/ s/11/00/ | s/22/11/g

在不重复 match 正则表达式的情况下使用 sed 是否也可以做到这一点?

sed -e '/match/ s/11/00/ ; /match/ s/22/11/g ' $file

如果没有,是否可以用 perl 做到这一点?

【问题讨论】:

    标签: regex perl vim sed


    【解决方案1】:

    你可以使用:

    echo "->11,22<-
    ->01,20<-" | sed '/11/ {s/11/00/g; s/22/11/g}'
    

    输出是:

    ->00,11<-
    ->01,20<-
    
    • /11/ 将其 { ... } 块内的 s 命令限制为仅匹配行

    【讨论】:

    • 在 awk 中仅供参考,您不需要复制 /11/: awk 'gsub(/11/,"00"){gsub(/22/,"11")}1'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 2018-09-16
    相关资源
    最近更新 更多