我正在尝试编写一个RegEx来替换字符串中的字符,只要满足条件。特别是,如果字符串以y
结尾,我想将a
的所有实例替换为o
并删除最终的y
。为了说明我试图用例子做什么:
Katy --> Kot
cat --> cat
Kakaty --> KoKot
avidly --> ovidl
我使用的是RegEx s/\(\w*\)a\(\w*\)y$/\1o\2/g
,但它不起作用。我想知道如何用RegEx来捕捉这项任务的“条件”性质。
我们非常感谢您的帮助。
答案 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
'