Regex 带条件替换的正则表达式
我试图编写一个正则表达式来替换字符串中的一个字符,前提是满足一个条件。特别是,如果字符串以Regex 带条件替换的正则表达式,regex,awk,sed,Regex,Awk,Sed,我试图编写一个正则表达式来替换字符串中的一个字符,前提是满足一个条件。特别是,如果字符串以y结尾,我想将a的所有实例替换为o,并删除最后的y。为了举例说明我试图做什么: Katy --> Kot cat --> cat Kakaty --> KoKot avidly --> ovidl 我使用的是RegExs/\(\w*\)a\(\w*\)y$/\1o\2/g,但它不起作用。我想知道如何用正则表达式捕捉这个任务的“条件”性质 非常感谢您的帮助。您可以使
y
结尾,我想将a
的所有实例替换为o
,并删除最后的y
。为了举例说明我试图做什么:
Katy --> Kot
cat --> cat
Kakaty --> KoKot
avidly --> ovidl
我使用的是RegExs/\(\w*\)a\(\w*\)y$/\1o\2/g
,但它不起作用。我想知道如何用正则表达式捕捉这个任务的“条件”性质
非常感谢您的帮助。您可以使用
awk
:
输入:
cat file
awk '/y$/{gsub(/a/, "o"); sub(/.$/, "")} 1' file
命令:
cat file
awk '/y$/{gsub(/a/, "o"); sub(/.$/, "")} 1' file
使用GNU时:
如果一行以y结尾(/y$/
),则将每个a
替换为o
,并将尾随的y替换为零(s/y$/
)
输出:
Kot
cat
Kokot
ovidl
科特
猫
科科特
奥维德
你可以使用一些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
'
你必须使用sed吗?这是用于shell脚本的吗?是的,我正在尝试使用
sed
或一些shell等价物来替换它。我将添加一个示例。我还可以编写”/y$/{s///;y/a/o/}
来重用过滤器正则表达式。@glennjackman:谢谢你的提示。如果我没看错的话,那么我必须插入一个带有GNU sed的分号:/y$/{s//;y/a/o/;}
嗯,对。奇怪的是,s/a/o/g
不需要分号。perl中的等价物没有任何改进:perl-pe'/y$/和do{s//;y/a/o/}
当我试图用sayto
替换a
时,这似乎不起作用。它是否只适用于长度相等的替换?
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
'