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

Awk 仅将大写单词转换为小写,以取消名词的大写,awk,sed,grep,nlp,tr,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. 如果第一个字符与大写匹配,而任何后续字符都不匹配,请将第一个字符转换为小写

鉴于:

我想获得:

$ cat input
Hello
Welcome
strIng
North Korea
USA
U.K.
如何将大写单词*转换为小写?

*:第一个字母大写


注意:我寻找一个取消名词大写的命令,同时不攻击首字母缩略词和奇怪的单词。

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

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

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

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

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

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

A
sed
解决方案:

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

测试并确认对您的示例有效。修改以适用于重音字符(不确定awk的
toupper
对它们有多好)。

A
sed
解决方案:

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


测试并确认对您的示例有效。修改以适用于重音字符(不确定awk的
toupper
对它们有多好)。

尽管有一个例子很好,但您必须更好地指定您的要求。
Hello
Welcome
North
USA
U.K
有何不同?
North Korea
USA
U.K
是多个大写的行。因此,如果第三行是
StrIng
(都是
S
I
大写),您的输出应该与输入相同?我认为是这样的:第一个字符大写,然后只有小写=>将所有字符转换为小写。所以
StrIng
=>
StrIng
StrIng
StrIng
StrIng
StrIng

我在寻找一个逗号,它可以取消名词的大小写,同时不攻击首字母缩写词或故意歪曲。尽管有个例子很好,您必须更好地指定您的要求。
Hello
Welcome
North
USA
U.K
有何不同?
North Korea
USA
U.K
是多个大写的行。因此,如果第三行是
StrIng
(都是
S
I
大写),您的输出应该与输入相同?我认为是这样的:第一个字符大写,然后只有小写=>将所有字符转换为小写。所以
StrIng
=>
StrIng
StrIng
StrIng
StrIng
StrIng

我在寻找一个逗号,它可以取消名词的大写,同时不攻击首字母缩写词或故意歪曲。是的,但也需要包括线边界。这将改变修改后的线中的空白,这可能是不可取的<代码>$0=tolower(substr($0,1,1))substr($0,2)不会。另外,
[A-Z]
在某些地区将包含小写字母,最好使用字符类
[:upper:
。在
[A-Z][^A-Z]+$
中,
*
将更好,因此也包括单字符单词(A=>A)。这确实是目前没有涵盖的@EdMorton建议
/^[:upper:][^[:upper:]]*$
因此,为了避免
A-Z意味着“除A以外的所有大写和小写字母”。
最后,建议考虑空格和点的变体是明智的。是的,但也需要包括线边界。这将改变修改后的线中的空白,这可能是不可取的<代码>$0=tolower(substr($0,1,1))substr($0,2)不会。另外,
[A-Z]
在某些地区将包含小写字母,最好使用字符类
[:upper:
。在
[A-Z][^A-Z]+$
中,
*
将更好,因此也包括单字符单词(A=>A)。这确实是目前没有涵盖的@EdMorton建议
/^[:upper:][^[:upper:]*$
因此,为了避免
A-Z意味着“除A之外的所有大写和小写字母”的陷阱。
最后,明智的做法是提出一个考虑空格和点的变体。在某些地区,字母的排序顺序是
aAbBcC…zZ
因此
A-Z
意味着“除了
a
”以外的所有大写和小写字母。为了便于携带,请使用字符类
/^[:upper:][^[:upper:][]*$
。@EdMorton+1。您能将其扩展到音译吗?在某些地区,字母的排序顺序是
aAbBcC…zZ
所以
a-Z
的意思是”除了
a
”之外的所有大写和小写字母。为了便于携带,请使用字符类
/^[:upper:][^[:upper:]*$
。@EdMorton+1。您能将其扩展到音译吗?