【问题标题】:sed regular expression for escaped urls转义网址的 sed 正则表达式
【发布时间】:2017-06-08 05:05:00
【问题描述】:

为什么sed 没有替换任何东西:

sed -i '' 's/<a href="\.\.\/\.\.\/ja\/%E6%9C%88\/[^-]\+-page-[\d]\+.html"\/>//g' foo.htm 

我希望它匹配以下字符串:

<a href="../../ja/%E6%9C%88/%E3%82%A2%E3%83%B3%E3%82%AE%E3%83%A9-page-2013.html"/>

【问题讨论】:

  • 一些观察结果:sed 不支持 \d ... 使用 [0-9]... 甚至支持像 \w\s 等序列的 GNU sed 也不会不能在字符类中工作

标签: linux sed


【解决方案1】:

您不能使用 \d 将数字与 sed 匹配。使用[0-9][[:digit:]]

sed -i '' 's/<a href="\.\.\/\.\.\/ja\/%E6%9C%88\/[^-]\+-page-[0-9]\+.html"\/>//g' foo.htm 

【讨论】:

  • 建议的命令仍然不起作用。看来[^-]\+ 是问题所在……
  • \+ 是一个 GNU sed 扩展。您可以使用[^-]\{1,\}[^-][^-]* 获得相同的结果。
猜你喜欢
  • 2021-01-04
  • 2021-04-22
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多