给出:
$ cat input
Hello
Welcome
strIng
North Korea
USA
U.K.
我想获得:
$ cat output
hello
welcome
strIng
North Korea
USA
U.K.
如何仅将大写单词*转换为小写?
*:首字母大写。
注意:我正在寻找一个命令,该命令可以取消名词的大写字母,同时又不会攻击缩写词和怪异的单词。
答案 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
对它们的处理效果如何。)