Bash 使用sed从URL中删除最后一个反斜杠

Bash 使用sed从URL中删除最后一个反斜杠,bash,sed,Bash,Sed,我有一个以文件名结尾的.txt文件中的URL列表-我需要提取该文件名。但是,反斜杠的数量和每个反斜杠前的字符串在URL中有所不同,例如: https://www.something.com/something/somethingelse/file.zip https://www.something.com/something/somethingelse/somethingnew/file2.txt 在我的URL中,somethingelse和somethingnew都是常量(由于数据隐私协议,

我有一个以文件名结尾的.txt文件中的URL列表-我需要提取该文件名。但是,反斜杠的数量和每个反斜杠前的字符串在URL中有所不同,例如:

https://www.something.com/something/somethingelse/file.zip
https://www.something.com/something/somethingelse/somethingnew/file2.txt
在我的URL中,
somethingelse
somethingnew
都是常量(由于数据隐私协议,无法共享实际URL),但将来可能会更改。以下代码适用于第一个url,但不适用于第二个url:

sed 's/^.*\/somethingelse\///g' in_file.txt > out_file.txt

是否有一个
sed
模式可用于匹配最后一个反斜杠后的所有内容-因此不需要字符串常量?

您可以使用不需要任何正则表达式的
awk

awk -F/ '{print $NF}' file

如果只想使用
sed
,请使用:

sed 's~.*/~~' file

您可以使用bash中可用的
basename
命令,例如:

$ basename "https://www.something.com/something/somethingelse/file.zip"
$ file.zip
或者如果您真的想使用sed:

sed 's#.*/##' in_file.txt > out_file.txt
您的reg-ex过于复杂。回想一下,regex中的
*
匹配基于“最贪婪的匹配”原则,即它将尽可能地匹配右侧。因此,无论
somethingelse
还是
somethingnew
是匹配的一部分都无关紧要,我们将匹配所有字符,直到找到行中最后一个
/
字符

你可以把你的表达改写成

 sed 's/^.*\///' in_file.txt > out_file.txt

请注意,
g
在您的测试用例中是矛盾的(但不会引起问题)

您可以尝试只匹配/

 sed 's:.*\/::' in_file.txt > out_file.txt
在_file.txt中

https://www.something.com/something/somethingelse/file.zip
https://www.something.com/something/somethingelse/somethingnew/file2.txt
https://www.something.com/something/somethingelse/file1.zip
https://www.something.com/something/somethingelse/somethingnew/file4.txt
https://www.something.com/something/somethingelse/somethingnew/file4/random/hello.txt
justafile.txt
out_file.txt已被删除

file.zip
file2.txt
file1.zip
file4.txt
hello.txt
justafile.txt

反斜杠:\slash:/您可以使用
basename
使用
xargs
out\u file.txt
完美地处理整个输入文件-谢谢!我最近在R中经常使用非贪婪正则表达式,但忘记了bash中的正则表达式是贪婪的。因为–正如你所说–reg-ex是贪婪的,你甚至可以不使用首字母
^
(尽管这样感觉更好)
https://www.something.com/something/somethingelse/file.zip
https://www.something.com/something/somethingelse/somethingnew/file2.txt
https://www.something.com/something/somethingelse/file1.zip
https://www.something.com/something/somethingelse/somethingnew/file4.txt
https://www.something.com/something/somethingelse/somethingnew/file4/random/hello.txt
justafile.txt
file.zip
file2.txt
file1.zip
file4.txt
hello.txt
justafile.txt