regex - 带条件替换的正则表达式

标签 regex awk sed

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

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

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

非常感谢您的帮助。

最佳答案

使用 GNU sed:

如果一行以 y (/y$/) 结尾,将每个 a 替换为 o 并将结尾的 y 替换为空值 (s/y$//).

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

输出:

Kot
cat
Kokot
ovidl

关于regex - 带条件替换的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49180851/

相关文章:

regex - 从文件中提取正则表达式捕获组的匹配项

perl - Perl 中与 awk 中的/text/,/END/等价的是什么?

Bash 游戏得分文件

bash - 删除具有相似前缀的重复行

c# - HtmlAgilityPack 是否能够在其 XPATH 选择器中使用正则表达式?

ruby - 匹配类似空格的字符的最佳方法是什么?

正则表达式仅当两个部分都存在时才允许分隔符

linux - 找到 PATTERN 时合并两个文本文件的行

linux - 处理 400 个 .txt 文件的 awk 脚本

json - awk 更改日期时间格式