我想用一个 sed 命令将第一个字母替换为大写。
示例“马德里”到“马德里”。 (n=3)
我知道如何使用此命令将第一个字母更改为大写:
sed -e "s/\b\(.\)/\U\1/g"
但我不知道如何针对我的问题更改此命令。
我试图改变
sed -e "s/\b\(.\)/\U\1/g"
到
sed -e "s/\b\(.\)/\U\3/g"
但这没有用。另外,我在这个网站上用谷歌搜索和搜索,但我找不到我的问题的确切答案。
谢谢你。
最佳答案
我从你对 \U
的使用推断您正在使用 GNU sed
:
n=3
echo 'madrid' | sed -r 's/\<(.{'"$n"'})/\U\1/g' # -> 'MADrid'
-e
选项 -r
启用对扩展正则表达式的支持,这些表达式具有更熟悉的语法并提供更多功能。 sed
拼接有 shell 变量值的脚本,以避免混淆 shell 预先扩展的内容和 sed
解释的内容之间的混淆。本身。 \<
用于代替 \b
,因为与后者不同,它只匹配单词的开头。谢谢,Casimir et Hippolyte 但是,上面的内容替换了单词开头的任何 3 个字符。
将其限制为最多
$n
字母:sed -r 's/\<([[:alpha:]]{1,'"$n"'})/\U\1/g'
至于你尝试过的:
\3
在您的尝试中 sed -e "s/\b\(.\)/\U\3/g"
指正则表达式(不存在)中的第三个捕获组(带括号的子表达式,(...)
),它不指3次重复。相反,您必须确保您的唯一捕获组(您可以在替换中将其称为
\1
)本身捕获所需数量的字符 - 这就是 {<n>}
量词是为了;相关{<m>,<n>}
构造匹配一系列重复。
关于regex - 如何用一个 sed 命令将第一个字母替换为大写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171692/