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

时间:2019-01-21 20:14:24

标签: awk sed grep nlp tr

给出:

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

我想获得:

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

如何仅将大写单词*转换为小写?

*:首字母大写。

注意:我正在寻找一个命令,该命令可以取消名词的大写字母,同时又不会攻击缩写词和怪异的单词。

2 个答案:

答案 0 :(得分:4)

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

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

如果第一个字符与大写字母匹配,而随后的任何字符都不匹配,则将第一个字符转换为小写字母。

答案 1 :(得分:1)

一种sed解决方案:

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

经过测试并确认可用于您的示例。修改以适用于带重音的字符(不确定awk的toupper对它们的处理效果如何。)