【发布时间】:2014-06-22 19:49:03
【问题描述】:
您好,我想在 Solaris OS 中大写一个变量。
从 HELLO_WORLD 到 Hello_World
或者也可以打招呼
请帮忙,这是 Solaris 操作系统:
Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC 版权所有 (c) 1983, 2011,Oracle 和/或其附属公司。版权所有。 2011 年 8 月 23 日组装
【问题讨论】:
您好,我想在 Solaris OS 中大写一个变量。
从 HELLO_WORLD 到 Hello_World
或者也可以打招呼
请帮忙,这是 Solaris 操作系统:
Oracle Solaris 10 8/11 s10s_u10wos_17b SPARC 版权所有 (c) 1983, 2011,Oracle 和/或其附属公司。版权所有。 2011 年 8 月 23 日组装
【问题讨论】:
如果你有 Perl:
% echo HELLO_WORLD FOO bar | perl -pe '($_ = lc $_) =~ s/(\b|_)./\U$&/g'
Hello_World Foo Bar
perl -pe 从标准输入读取并在应用作为参数给出的 Perl 代码后打印每一行。 $_ 是当前行。 lc 函数将字符串转换为小写。正则表达式匹配单词边界或下划线后跟任何字符。 s/// 命令将任何匹配的子字符串替换为其大写等效项。尾随的 g 会导致在每一行上尽可能多地执行替换(默认情况下只执行一次)。
如果你没有 Perl(我不知道 Solaris 是否默认包含它),试试这个:
% echo HELLO_WORLD FOO bar | tr A-Z a-z | sed 's/\(_\|\<\)./\U&/g'
Hello_World Foo Bar
您可以使用y/// 将大小写映射合并到sed 命令中,但与tr 不同,它似乎不接受范围:
% echo HELLO_WORLD FOO bar | tr A-Z a-z | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/;s/\(_\|\<\)./\U&/g'
Hello_World Foo Bar
【讨论】: