代码之家  ›  专栏  ›  技术社区  ›  Hugo LOPEZ

只将大写单词转换为小写以取消名词的大写

  •  0
  • Hugo LOPEZ  · 技术社区  · 7 年前

    鉴于:

    $ cat input
    Hello
    Welcome
    strIng
    North Korea
    USA
    U.K.
    

    我想获得:

    $ cat output
    hello
    welcome
    strIng
    North Korea
    USA
    U.K.
    

    如何将大写字母*转换为小写字母?

    *:首字母大写。

    注意:我寻找一个取消名词大写的命令,而不是攻击缩写词和奇怪的词。

    2 回复  |  直到 7 年前
        1
  •  4
  •   karakfa    7 年前

    类似这样的内容将涵盖示例输入,但不确定它是否包含所有其他隐含条件

    $ awk '/^[A-Z][^A-Z]+$/{$1=tolower(substr($1,1,1)) substr($1,2)}1' file
    hello
    welcome
    strIng
    North Korea
    USA
    U.K.
    

    如果第一个字符与大写字符匹配,而任何后续字符不匹配,请将第一个字符转换为小写字符。

        2
  •  1
  •   Happy Green Kid Naps    7 年前

    sed 解决方案:

    sed '/^[A-Z][^A-Z]*$/ {
    /^./y/ABCEDEFGHIJKLMNOPQRSTUVWXYZ/abcedefghijklmnopqrstuvwxyz/
    }' input.txt > output.txt
    

    测试并确认可以为您的示例工作。修改以适用于重音字符(不确定awk的效果如何) toupper 就这样了)。