如何使某个字符后的字母大写

如何使某个字符后的字母大写

如何将某个字符前的字母大写?(^)

我正在尝试对上述链接进行反向操作。

我想将某个字符或单词后的所有内容大写。

可以使用 awk、sed 或 bash

例子

 foo^bar
 foobar ^ foobar

 foo^BAR
 foobar ^ FOOBAR

谢谢

答案1

使用 sed:

sed 's/\^.*/\U&/' file

^被转义,以删除其作为行首锚点的特殊含义;您也可以使用[^]

或 awk

awk -F^ 'BEGIN{OFS=FS} {x=$1; $0=toupper($0); $1=x} 1' file

(存储第一个^以 - 分隔的字段;将整行更改为大写;然后替换原来的第一个字段)。

答案2

使用普通的 bash,我们需要几个额外的变量:

for line in 'foo^bar' 'foobar ^ foobar' 'a^b^c'; do
  prefix=${line%%^*}
  suffix=${line#*^}
  caps="${prefix}^${suffix^^}"
  printf '%s ==> %s\n' "$line" "$caps"
done
foo^bar ==> foo^BAR
foobar ^ foobar ==> foobar ^ FOOBAR
a^b^c ==> a^B^C
  • ${var%%pattern}-> 从末尾删除与模式匹配的最长子字符串
  • ${var#pattern}-> 从开头删除与模式匹配的最短子字符串
  • ${var^^}-> 大写

参考:3.5.3 Shell参数扩展

相关内容