首页 > 解决方案 > 使用 sed 从两个不同字符之后的 AND 之间的 URL 中删除一个字符串

问题描述

我有一个文本文件,其中包含用双引号括起来的 URL 列表:

"http://test.com/secure/test/12345/doc.pdf"

所以我试图将 URL 附加到文件协议,并删除 URL 末尾的文件名。预期输出为:

"file://12345"

在mac上,我试过了

sed -i '.bak' 's~http://test.com/secure/test/~file://~g' url.txt

上面的命令只附加了前面部分,

"file://12345/doc.pdf"

我不太确定如何匹配第一个"http://test.com/secure/test/,然后如何匹配 URL 中的下一个正斜杠/doc.pdf",以删除文件名(各不相同)。

标签: regexawksedgrep

解决方案


sed在确认文件对您有效后,您可以调整以下命令来修改您的文件:

echo '"http://test.com/secure/test/12345/doc.pdf"' | sed -E 's@"http://test.com/secure/test/([^/"]*)/.*"@"file://\1"@'
"file://12345"

说明

  • ([^/"]+)将捕获12345您的 URL 的一部分(您可能必须限制为更具体的类[0-9a-zA-Z]而不是[^/"]
  • /.*"将匹配/URL 的其余部分

推荐阅读