我需要将字符串“TestString”更改为“[tT]est[sS]tring”格式。
我尝试使用sed
:
testString="TestString"
sed 's/\([[:upper:]]\)/[&\1]/g' <<< "$testString" | tr '[[:upper:]]' '[[:lower:]]'
结果是:
[tt]est[ss]tring
我想请求您帮助找到一种方法,使括号内的第二个字符大写。
谢谢。
最佳答案
您只需使用 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
来启动它。
关于bash - 从字符串中查找并替换大写字符并保留原始匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54779234/