【问题标题】:Replace double consonant letters with one using sed command使用 sed 命令将双辅音字母替换为一个
【发布时间】:2020-05-18 15:20:10
【问题描述】:

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

我试过了

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

【问题讨论】:

  • 您搜索了什么,找到了什么?您尝试过什么,它是如何失败的?
  • 猫 test.txt |头| tr -s '[^AEUIO\n]' '?' #所有单词在大写猫 test.txt |头| tr -s '[^AEUIO\n]' '?'

标签: unix sed command-line tr


【解决方案1】:

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

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

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

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

sedtr 都不需要 cat 为它们读取标准输入(尽管 tr 隐晦地不接受文件名参数)。另见切线Useless use of cat?

【讨论】:

  • 好细节..虽然严格不符合“好”的要求。
【解决方案2】:

匹配一个辅音,记住\( \),然后再次匹配\1并将其替换为它自己。

sed 's/\([bcdfghjklmnpqrstvxzBCDFGHJKLMNPQRSTVXZ]\)\1/\1/'

【讨论】:

    猜你喜欢
    • 2017-05-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 2021-05-16
    • 1970-01-01
    相关资源
    最近更新 更多