如何使用模式将小写字母转换为大写字母

如何使用模式将小写字母转换为大写字母

我有一个文件,其内容如下:

 t_chaos_m_quartz_locks
 t_chaos_m_quartz_blob_triggers
 t_chaos_m_quartz_calendars

我想改为^t_chaos_m_quartz_[a-z]t_chaos_m_quartz_[A-Z]我曾尝试过这个:

awk -F "t_chaos_m_quartz" '{print $FS toupper($2)}' tmp2

输出:(我认为 FS 表示分隔符 t_chaos_m_quartz,但它打印整个)

 t_chaos_m_quartz_locks               _LOCKS
 t_chaos_m_quartz_blob_triggers       _BLOB_TRIGGERS
 t_chaos_m_quartz_calendars           _CALENDARS

以及:(受到的启发tr -t [a-z][A-Z],直到它把一切变成资本)

cat tmp2 | tr -t [t_chaos_m_quartza-z] [t_chaos_m_quartzA-Z]  
 T_CHAOS_M_QUARTZ_LOCKS
 T_CHAOS_M_QUARTZ_BLOB_TRIGGERS
 T_CHAOS_M_QUARTZ_CALENDARS

最奇怪的是:(我找不到描述输出的方法)

cat tmp2 | tr -t t_chaos_m_quartz[a-z] [A-Z]
NISXQEFIHIJKQMNOIlES]F
NISXQEFIHIJKQMNOIRlERINMYWWUMF
NISXQEFIHIJKQMNOISQlUnTQMF

请说明如何获得:(并请尝试解释为什么以上有它们的输出)

 t_chaos_m_quartz_LOCKS
 t_chaos_m_quartz_BLOB_TRIGGERS
 t_chaos_m_quartz_CALENDARS

答案1

只需删除美元符号FS即可使其起作用:

awk -F "t_chaos_m_quartz" '{print FS toupper($2)}' tmp2

为啥不起作用$FS

当您在前面添加美元符号时FSawk它会将其解释为位置参数

位置变量不是特殊变量,而是由美元符号触发的函数

也就是说,$FS不返回FS的值,而是被解释为$0并输出整行。

在中使用变量时awk,只需使用其名称即可引用它们。

答案2

从小写转换为大写的唯一方法是使用名为 toupper 的函数。

如果您仅转换单个字母,则以下代码将有效:

char_to_upper = toupper(char)

相关内容