我意识到标题太可怕了,但是无论如何,我有一个任务要使用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] 删除。
我来说两句