sed从网址中删除结尾的斜杠

时间:2019-10-28 10:56:44

标签: bash sed

我正在尝试使用sed从网址中删除结尾的斜杠。我可以使用以下命令成功删除尾部斜杠(请注意,它位于package.json中的构建脚本中,因此避免了引号和双反斜杠)。

"build": "sed -i -e 's/\\/\"/\"/g' index.html"  

但是,我担心这可能有点过分热衷,我想确保这仅针对具有href属性的网址,但我不确定如何使BRE捕获网址,而不是最终斜杠。基本上,我正在尝试使用捕获组来完成此操作,但我现在认为这是过于贪婪的问题。我已经尝试了以下方法,但似乎与之不符:

"build": "sed -i -e 's/href=\"\\(.*\\)*\\/\"/href=\"\\1\"/g' index.html"

我该怎么做。

即 所以href =“ https://example.com/path/foo/bar/”

成为href =“ https://example.com/path/foo/bar”

2 个答案:

答案 0 :(得分:0)

如果要将捕获组与sed一起使用,则必须指定-r选项:

echo 'href="google.nl/"' | sed -r "s#href\=(\"|')([^'\"]*)/(\1)#href=\1\2\1#g"

手册页:

  

-E,-r,-regexp扩展
  在脚本中使用扩展的正则表达式(出于可移植性,请使用POSIX -E)。

正则表达式的输出:

href="google.nl/d" = href="google.nl/d"
href="google.nl"   = href="google.nl"
href="google.nl/"  = href="google.nl"

答案 1 :(得分:0)

sed接受用于搜索和替换命令的任何定界符。所以我建议使用例如#而不是斜杠,以免将分隔符与搜索模式混淆。

为免贪婪,请从百搭单子([^"]*)中排除引号。

sed 's#href="\([^"]*\)/"#href="\1"#g' yourfile

应该做的事