Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed从url中删除尾部斜杠_Bash_Sed - Fatal编程技术网

Bash sed从url中删除尾部斜杠

Bash sed从url中删除尾部斜杠,bash,sed,Bash,Sed,我正在尝试使用sed从URL中删除尾部斜杠。我可以使用以下命令成功删除尾随斜杠(请注意它位于package.json的构建脚本中,因此转义引号和双反斜杠) 但是,我担心这可能有点过分,我想确保这只是针对带有href属性的url,但我不确定如何使BRE捕获url,而不是最后的尾随斜杠。基本上,我正在尝试使用捕获组来实现这一点,但我认为现在这就是过于贪婪的问题所在。我尝试了以下方法,但似乎与任何方法都不匹配: "build": "sed -i -e 's/href=\"\\(.*\\)*\\/\"/

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

但是,我担心这可能有点过分,我想确保这只是针对带有href属性的url,但我不确定如何使BRE捕获url,而不是最后的尾随斜杠。基本上,我正在尝试使用捕获组来实现这一点,但我认为现在这就是过于贪婪的问题所在。我尝试了以下方法,但似乎与任何方法都不匹配:

"build": "sed -i -e 's/href=\"\\(.*\\)*\\/\"/href=\"\\1\"/g' index.html"
我怎么能这样做呢

i、 e 所以href=”https://example.com/path/foo/bar/"


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

如果要将捕获组与
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"

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

为了不贪婪,从小丑列表中排除引号(
[^”]*


应该做这项工作

捕获组在没有-r标志的情况下为我工作,事实上,该标志导致命令失败,说它是非法的(如果有区别的话,我在osx上运行此命令)
href="google.nl/d" = href="google.nl/d"
href="google.nl"   = href="google.nl"
href="google.nl/"  = href="google.nl"
sed 's#href="\([^"]*\)/"#href="\1"#g' yourfile