用SED大写第一个字母

nev*_*int 40 unix linux bash sed

如何将单词的第一个字母替换为大写字母,例如

Trouble me
Gold rush brides
Run Code Online (Sandbox Code Playgroud)

Trouble Me
Gold Rush Brides
Run Code Online (Sandbox Code Playgroud)

tan*_*ens 70

这行应该这样做:

sed -e "s/\b\(.\)/\u\1/g"
Run Code Online (Sandbox Code Playgroud)

  • 注意:仅适用于GNU sed.如果你在OSX,FreeBSD等,这什么都不做. (18认同)
  • 你能描述一下命令在做什么吗?例如,手册页没有列出这一点。 (3认同)
  • 它告诉sed将每个单词边界后的字符转换为大写.\ b是单词边界.查看www.rexegg.com,了解一些有用的正则表达式符号表. (3认同)
  • 这里的关键是 `\u` 标记,它将大写下一个字符。如需更好的参考,请参阅 [此链接](https://perldoc.perl.org/perlre.html) 的“转义序列”部分。 (2认同)
  • @lslboy ..不完全是。任务是仅将每个单词的第一个字母大写,而您的解决方案将所有内容都大写。[`tr(1)`](http://manpages.debian.org/tr) 命令可能更容易做到这一点。对于 perl,请考虑“perl -pe 's/\b(.)/\u\1/g”。`\b` 标识字边界。但请注意,这仍然使用“\u”,它是 Perl RE 扩展,不被 sed 等非 Perl 工具普遍支持。 (2认同)

gho*_*g74 22

使用awk:

awk '{for(i=1;i<=NF;i++){ $i=toupper(substr($i,1,1)) substr($i,2) }}1' file
Run Code Online (Sandbox Code Playgroud)

输出将是:

Trouble Me
Gold Rush Brides
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是最便携的。谢谢你。 (2认同)
  • 适用于 OSX 和 GNU。 (2认同)

rek*_*sri 13

使用以下sed命令来大写每个单词的第一个字母.

echo -e "Trouble me \nGold rush brides" | sed -r 's/\<./\U&/g'
Run Code Online (Sandbox Code Playgroud)

产量

Trouble Me
Gold Rush Brides
Run Code Online (Sandbox Code Playgroud)

-r开关通知sed使用扩展的正则表达式.该指令,sed然后告诉它" 小号地球与替换"(在s开头)的图案\<.与图案\U& lobally,即所有实例中的每一行(这是g在端改性).我们正在搜索的模式\<.是寻找单词边界(\<)后跟任何字符(.).替换模式是\U&,在\U指示sed进行以下文字大写&一个代名词\0,它是指"一切是匹配的".在这种情况下,"匹配的所有内容"正是.匹配的内容,因为字符边界不包含在匹配中(相反,它们是锚点).什么.匹配是一个字符,所以这是什么,是上套管.

  • 当我不必做"man sed"来理解答案时,这是非常好的,因为答案包含对其内容的解释.也许您会考虑为您的答案提供解释? (7认同)
  • @JonathanKomar根据您的要求进行编辑:) (2认同)

cht*_*i59 8

sed 的另一个较短版本:

sed -e "s/\b./\u\0/g"
Run Code Online (Sandbox Code Playgroud)


小智 5

我有撇号所以,解决第一个解决方案......

mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed -e "s/\b\(.\)/\u\1/g"
Run Code Online (Sandbox Code Playgroud)

贝斯特韦斯特普拉斯鲍勃旅馆

mike@mike-laptop3:~$ echo "BEST WESTERN PLUS BOB's INN" | tr "[A-Z]" "[a-z]" | sed "s/\( \|^\)\(.\)/\1\u\2/g"
Run Code Online (Sandbox Code Playgroud)

贝斯特韦斯特普拉斯鲍勃旅馆

  • 如果您到处都是大写字母,这也有帮助,但您只希望每个单词的第一个字母大写 (3认同)