带有条件替换的正则表达式

时间:2018-03-08 19:18:03

标签: regex awk sed

我正在尝试编写一个RegEx来替换字符串中的字符,只要满足条件。特别是,如果字符串以y结尾,我想将a的所有实例替换为o并删除最终的y。为了说明我试图用例子做什么:

Katy    --> Kot
cat     --> cat
Kakaty  --> KoKot
avidly  --> ovidl

我使用的是RegEx s/\(\w*\)a\(\w*\)y$/\1o\2/g,但它不起作用。我想知道如何用RegEx来捕捉这项任务的“条件”性质。

我们非常感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

使用GNU sed:

如果某行以y(/y$/)结尾,请将每个a替换为o,并将所有尾随y替换为s/y$//

sed '/y$/{y/a/o/;s/y$//}' file

输出:

Kot
cat
Kokot
ovidl

答案 1 :(得分:3)

您可以使用awk

<强>输入:

cat file

Katy
cat
KaKaty
avidly

<强>命令:

awk '/y$/{gsub(/a/, "o"); sub(/.$/, "")} 1' file

Kot
cat
KoKot
ovidl

答案 2 :(得分:1)

可以使用一些sed意大利面条代码,但请不要

sed '
    s/y$//     ; # try to replace trailing y
    ta         ; # if successful, goto a
    bb         ; # otherwise, goto b
    :a
    y/a/o/     ; # replace a with o
    :b
'