使用 sed 将第一个非数字字符大写,其他字符保持原样

使用 sed 将第一个非数字字符大写,其他字符保持原样

我正在尝试转换字符串,如“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

相关内容