首页 > 解决方案 > 使用 sed 命令将双辅音字母替换为一个

问题描述

sed如何使用Linux 命令仅用一个字母替换双辅音。示例:威廉 -> 威廉。grep -E '(.)\1+'commands 会在一行模式中查找两个相同辅音后面的单词,但是如何将它们替换为仅出现一次的字母?

我试过了

cat test.txt | head | tr -s '[^AEUIO\n]' '?'

标签: unixsedcommand-linetr

解决方案


tr是全有还是全无;无论上下文如何,它将替换所有出现的选定字符。对于正则表达式替换,请查看sed-您甚至将其包含在问题的标签中,但您似乎没有探索过它可能有用吗?

sed 's/\(.\)\1/\1/g' test.txt

点匹配任何字符;仅限于辅音,将其更改为[b-df-hj-np-tv-xz]或任何有意义的内容(可能扩展到包括大写;可能包括重音字符?)

被理解的正则表达式方言sed更像是grep没有被理解的方言-E(因此所有的反斜杠);虽然一些sed实现也支持这个选项来选择 POSIX 扩展的正则表达式方言。

两者都不sed需要为它们读取标准输入(尽管隐晦地tr不接受文件名参数)。也见 tangentially没用的 cat?cattr


推荐阅读