查找并替换字符串中的大写字符并保持原始匹配

问题描述 投票:3回答:1

我需要将字符串“TestString”更改为此格式“[tT] est [sS] tring”。

我尝试使用sed

testString="TestString" sed 's/\([[:upper:]]\)/[&\1]/g' <<< "$testString" | tr '[[:upper:]]' '[[:lower:]]'

结果是:[tt]est[ss]tring

我想请你的帮助,找到一种方法,使第二个字符在括号大写。

谢谢。

bash sed tr
1个回答
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来启动它。

© www.soinside.com 2019 - 2024. All rights reserved.