【问题标题】:Unable to use sed on Mac for exact match [duplicate]无法在 Mac 上使用 sed 进行精确匹配 [重复]
【发布时间】:2021-03-10 11:21:20
【问题描述】:

我需要使用替换文件来检查单词 he 或“he”的完全匹配,但不替换天气中的“he”,所以我决定在 macOS 上使用 sed 命令。我尝试同时使用双引号和单引号,但它不会改变任何东西

sed 's/\<he\>/it/g' file-he.yaml > file-it.yaml

这是输入文件file-he.yaml。

name: "QBERT Utterance Understanding Search Plus Siri he"

  topics:
    
    - weatherEvent
    - he

environment_variables:
  LANG: "he"

预期的输出是

name: "QBERT Utterance Understanding Search Plus Siri it"
    
      topics:
        
        - weatherEvent
        - it
    
    environment_variables:
      LANG: "it"

我也试过了:

sed 's/"he"/it/g' file-he.yaml > file-it.yaml

它甚至取代了天气中出现的“他”。知道这是为什么吗?

【问题讨论】:

标签: bash sed


【解决方案1】:

您要求 sed 匹配的是 &lt;he&gt; - 所以它当然不会更新(那是因为 OSX sed 不是 GNU sed)。

如果你想自己替换 he"he",你需要匹配很多不同的情况(为了使这项工作普遍有效,而不是简单地抓住 he)。

  • \she\s*$ 即。行以他结尾
  • ^\s*he\s 即。行以他开头
  • \she\s 即。一个他作为一个单独的词
  • "he" 即。 “他”

其他人建议使用 [[:&lt;:]] 字符类而不是 \&lt; - 这在 OSX 上运行良好 ...

# ( echo "Cd    "; echo "       Cd"; echo "ABCdFg CdFg Cd \"Cd\""; echo "Ab Cd EfG") | \
sed -e 's/[[:<:]]Cd[[:>:]]/FOO/g'
FOO    
       FOO
ABCdFg CdFg FOO "FOO"
AB'FOO
Ab FOO EfG

【讨论】:

    猜你喜欢
    • 2015-10-03
    • 1970-01-01
    • 2015-03-12
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多