regex - 如何用一个 sed 命令将第一个字母替换为大写

标签 regex sed scripting

我想用一个 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/

    相关文章:

    javascript - 用 & 字符替换搜索输入框中的所有空格

    c# - 正则表达式提取 html 正文

    Python 正则表达式 : Extract volume (mL) from strings

    sed - 使用 sed 在数字和文本之间添加空格

    javascript: "somestring A.B.C(anything can be here)"的正则表达式

    linux - 替换文件中的动态行

    linux - 遍历文件并用 sed 替换每一行

    javascript - Photoshop 脚本 - 未正确调整大小

    bash - 使用 bash 脚本启动屏幕,然后分割屏幕并调整屏幕大小

    powershell - 更改主机名和域加入正常;但当指定 OU 时