我正在尝试使用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”
答案 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
应该做的事