sed 用正则匹配的问题

“/topics/9949"这段文本用正则:/topics/\d+ 可以匹配到,可是放到sed里面就匹配不到了

sed -e 's/\/topics\/d+/123/g'

是不是\d要转义,网上没查到。。。

  • 就算是sed可以使用\d转义符代表数字,你这个格式也写的不对,d前面缺少了\
  • 另外因为sed支持的正则只有两种类型,而这两种类型都不支持\d转义符,所以你在sed里匹配数字的话只能试用[0-9]
  • 而且因为普通正则不支持 + 也不支持 {} 描述次数,你需要用sed的-r参数来激活扩展正则,这样就可以使用这两个符号配合[0-9]来匹配1次或多次的数字了
  • 另外 sed的表达式中,分隔符并不是非要写/ 你也可以替换成别的特殊符号,只要前后一致都用一种就行了
    比如 你想要的表达式可以写成 sed -r ‘s#/topic/[0-9]+#123#g’
1 Like

分隔符换成别的清楚了好多,sed和正则刚学2天有点头大,谢谢解答!