我需要将字符串“ TestString”更改为这种格式“ [tT] est [sS] tring”。
我尝试使用sed
:
testString="TestString"
sed 's/\([[:upper:]]\)/[&\1]/g' <<< "$testString" | tr '[[:upper:]]' '[[:lower:]]'
结果是:
[tt]est[ss]tring
我想寻求您的帮助,以找到使大括号内的第二个字符变为大写的方法。
谢谢。
答案 0 :(得分:3)
您可以为此使用sed
,而不必使用tr
。以下内容适用于GNU版本
sed -E 's/([[:upper:]])/[\L\1\u&]/g' <<< "$testString"
了解其工作原理
s/([[:upper:]])/[\L\1\u&]/g
# ^^^^^^^^^^^ Match the uppercase character
# ^^^^ lower case the matched letter
# ^^^^ upper case the matched letter
您也可以执行s/([[:upper:]])/[\L\1\u\1]/g
,因为\1
和&
都引用了搜索模式中的匹配组。
MacOS(FreeBSD)sed默认不支持大小写转换功能\L
,\u
。您可以使用brew install gnu-sed
安装它并调用gsed
来启动它。