awk 或 sed 只能小写/大写字符串中的一个字符?

mol*_*lni 13 bash sed awk

有没有办法在某个字符串中只大写/小写一个字符?

输入示例:

syslog_apr_24_30
syslog_mar_01_17
Run Code Online (Sandbox Code Playgroud)

期望的输出:

syslog_Apr_24_30
syslog_Mar_01_17
Run Code Online (Sandbox Code Playgroud)

请注意大写的月初。

我已经尝试过了,awk但我还不够好,无法让它发挥作用。

cho*_*oba 19

您可以\u在 GNU sed 中使用大写字母:

sed -e 's/_\(.\)/_\u\1/' input
Run Code Online (Sandbox Code Playgroud)

Perl 也这样做:

perl -pe 's/_(.)/_\u$1/' input
Run Code Online (Sandbox Code Playgroud)

\l 相反。

  • 稍微简单一点:`sed 's/_./\U&/'` (8认同)

Ser*_*nyy 5

Awk 带有子字符串和 toupper 的版本

awk 'BEGIN{ FS=OFS="_"} {
        cap=toupper(substr($2,1,1));
        lower=substr($2,2,3);
        $2 = cap lower; print 
}' list.txt 
Run Code Online (Sandbox Code Playgroud)

示例运行:

$ awk 'BEGIN{ FS=OFS="_"} { 
    cap=toupper(substr($2,1,1));
    lower=substr($2,2,3);$2 = cap lower; print 
}' list.txt               
syslog_Apr_24_30
syslog_Mar_01_17
Run Code Online (Sandbox Code Playgroud)