使用sed保持被替换单词的复数形式和适当的大小写

i_am_so_stupid

我意识到标题太可怕了,但是无论如何,我有一个任务要使用sed将“ cat”的所有实例更改为“ dog”。很简单,但它也包含“ catapult”和“ bearcat”之类的词,我试图通过在代码中留一个空格来避免这些词。我的问题是每个单词都变成“狗”,在某些情况下我希望它是“狗”或“狗” ...

这是我要更改的文本文件:

尊敬的房主,

猫对人很重要。我们都喜欢猫的陪伴。如果您曾经想养一只猫,我们可以为您提供帮助。我们正在尝试为我们的城市举办一个“猫回家”的日子。为了帮助我们,我们邀请了NWMSU熊猫啦啦队,该市年度弹射比赛的组织者和当地名人来帮助寻找猫的家。

有只猫需要您为他们提供住所。因此,如果您是猫的爱人,请过来看看是否有某种方法可以在您的心中为猫找到家。

谢谢!!

猫也是人。

这是我得到的输出,这显然是错误的

尊敬的房主,

狗对人很重要。我们都喜欢猫的陪伴。如果您曾经想养一只猫,我们可以为您提供帮助。我们正在尝试为我们的城市举办一个“猫回家”的日子。为了帮助我们,我们邀请了NWMSU熊猫啦啦队,该市年度弹射比赛的组织者和当地名人来帮助寻找猫的家。

有只猫需要您为他们提供住所。因此,如果您是猫的爱人,请过来看看是否有某种方法可以在您的心中为猫找到家。

谢谢!!

狗也是人。

这是我的代码:

sed 's/[Cc]at[s] /dog /g' cats-dogs.txt 
偏斜

我敢肯定,您不能仅在(单个)RegEx中做到这一点。

就是说,这里简单的解决方案可能是最好的,因为似乎只有两种可能的情况(大写和小写)和一个替换词(也sed很容易允许多次替换)。

因此,这样的事情应该起作用(假设GNU sed):

sed -r 's/\bCat(s?)\b/Dog\1/g; s/\bcat(s?)\b/dog\1/g' cats-dogs.txt

使用扩展的正则表达式,因为在命令行上引号远没有那么恐怖。还要注意在此处扫描单词边界。

可能还有一种非常聪明(且不易读)的sed方式使用\u和缓冲区。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

sed用小写字母替换大小写混合的单词,同时保持所有大写单词不变

我该如何在Prolog中制作一个程序来识别用户输入的名词的性别,复数形式和大小写?

使用RegEx和IgnoreCase替换单词,但使用正确找到的单词大小写替换

替换 php 保持大小写上的单词

通过使用php保持大小写来查找和替换

替换单词并保持找到的字符串的区分大小写

搜索单数和复数形式的针

非英语文本中单词的频率:如何合并单数和复数形式等?

python替换多个单词保留大小写

替换文件中的单词(区分大小写)

搜索不区分大小写并替换整个单词

查找并替换单词-不区分大小写

使用 xlUp 将适当的大小写设置为范围

用sed进行大小写匹配模式替换

Java API,用于复数形式的英语单词

以占复数形式的单词列出Python日期时间倒数

如何使用简单的javascript过滤html表以完全匹配大小写和单词?

忽略单词并删除区分大小写和空格以匹配

如何计算单词重复数/在用户输入的文本中不区分大小写的比较?

区分大小写的替换

具有Postgres数据库和适当大小写的C#POCO类(不使用实体框架)

在vim中保留大小写的搜索和替换?

熊猫替换和不区分大小写

使用 .htaccess 使单词不区分大小写

当一个单词的同义词与它的复数形式相同时:如何命名列表和实例?

如何只用小写字母替换大小写不同的单词向量?

适当大小写后将适当大小写转换为空间-SQL Server

替换字符串中所有出现的单词,但保留原始单词的大小写

用该单词周围的 span 标记替换所有出现的单词。不区分大小写