我正在尝试转换字符串,如“123456A”至“123456A“ 或者 ”t东部”到“时间est”,但保留现有大写字母不变,例如testHW
变为TestHW
.
我已经尝试了很多尝试:
sed 's/[[:alpha:]]./\u\1/'
没有运气 - 有什么想法吗?
答案1
\1
或通用形式\n
,其中n
是 数字,应替换为与相应反向引用表达式匹配的文本,您可以通过将文本在\(...\)
BRE 或(...)
ERE 之间进行分组来定义该表达式。
使用 GNU sed:
$ echo 123456a | sed 's/\([[:alpha:]]\)/\u\1/'
123456A
或者:
$ echo 123456a | sed -E 's/([[:alpha:]])/\u\1/'
123456A
您还可以使用&
引用匹配的文本而不是反向引用:
$ echo 123456a | sed 's/[[:alpha:]]/\u&/'
123456A
请注意,[:alpha:]
匹配小写和大写字符,因此类似的内容123456Aa
将保持原样。
如果要将第一个小写字母替换为相应的大写字母,则必须使用[:lower:]
:
$ echo 123456Aa | sed 's/[[:lower:]]/\u&/'
123456AA