使用sed从两个之间的不同字符之后的AND之间的URL中删除字符串

时间:2019-05-15 08:26:49

标签: regex awk sed grep

我有一个文本文件,其中包含用双引号引起来的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"中的下一个正斜杠,以删除文件名(不同)。

2 个答案:

答案 0 :(得分:2)

在确认文件适合您之后,您可以修改以下sed命令来修改文件:

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

说明

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

答案 1 :(得分:1)

尝试一下:

awk -F/ '{print "\"file://" $(NF-1)"\"" }' urlfile.txt

说明

-F/                # fieldseperator is /
'{print "\"file://"  # print fix part
$(NF-1)"\"" }'         # print penultimate field