【问题标题】:Lowercase to Uppercase of character in Shell Scripting [duplicate]Shell脚本中字符的小写到大写[重复]
【发布时间】:2012-08-30 12:15:34
【问题描述】:

可能重复:
Character Lowercase to Uppercase in Shell Scripting

我的值是:james,adam,john 我正在尝试使它成为 James,Adam,John(每个名称的第一个字符应该是大写)。

echo 'james,adam,john' | sed 's/\<./\u&/g'

并非在所有系统中都有效。在一个系统中显示正常..但在另一个系统中不正常...

A="james adam john"
B=( $A )
echo "${B[@]^}"

它抛出了一些语法错误......所以,我通过一个长查询来做这件事 sing while 循环,这太长了。 有没有捷径可以做到这一点?

【问题讨论】:

  • 您的代码在哪些系统上工作,在哪些系统上不工作。

标签: perl shell unix sed awk


【解决方案1】:

TLP 方法相同,但使用 GNU sed:

echo "james,adam,john,sue ellen,billy-bob" | sed -r 's/\b(.)/\u\1/g'

输出:

James,Adam,John,Sue Ellen,Billy-Bob

如果只有第一个字母应该大写,请改用这个:

echo "james,adam,john,sue ellen,billy-bob" | sed 's/[^,]*/\u&/g'

输出:

James,Adam,John,Sue ellen,Billy-bob

【讨论】:

    【解决方案2】:

    有很多方法可以定义“名称的开头”。此方法选择单词边界后的任何字母并将其转换为大写。作为副作用,这也适用于“Sue Ellen”或“Billy-Bob”等名称。

    echo "james,adam,john" | perl -pe 's/(\b\pL)/\U$1/g'
    

    【讨论】:

      【解决方案3】:

      您可以像这样使用 awk 将输入中每个单词的首字母大写:

      echo "james,adam,john" | awk 'BEGIN { RS=","; FS=""; ORS=","; OFS=""; }
      { $1=toupper($1); print $0; }'
      

      输出

      James,Adam,John
      

      【讨论】:

      • 感谢 anubhava,它在我目前的系统中工作,让我在我需要的系统中尝试。
      【解决方案4】:

      使用 Perl:

      echo "james,adam,john" | \
        perl -ne 'print  join(",", map{ ucfirst } split(/,/))'
      

      【讨论】:

      • 感谢 perreal,它在我目前的系统中工作,让我在我需要的系统中尝试。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-16
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多