我想请求我的正则表达式的帮助。我需要从每个URL中提取最后一部分。我在下面的示例中将其标记为“to_extract”。
我想知道以下正则表达式与sed一起使用时出了什么问题:
sed 's/^[ht|f]tp.*\///' file.txt
file.txt的示例内容:
http://a/b/c/to_extract
ftp://a/b/c/to_extract
...
我只获得了ftp链接的正确结果,而不是http。 在此先感谢您对此的解释。 岛
答案 0 :(得分:8)
将[ht|f]
更改为(ht|f)
,这会带来更好的效果。
[abc]
表示"一个字符a
,b
或c
"。
[ht|f]
表示"一个字符h
,t
,|
或f
",根本不是你的想。
在某些版本的sed上,您必须使用-r
选项调用它,以便可以使用扩展的正则表达式:
sed -r 's/^(ht|f)tp.*\///' file.txt
如果您只想提取网址的最后部分而不想要其他任何内容,那么您可能需要
sed -rn 's/^(ht|f)tp.*\///p' file.txt
答案 1 :(得分:1)
如何使用“basename”:
basename http://a/b/c/to_extract
to_extract
你可以通过for循环简单地实现你想要的东西。
#!/bin/bash
myarr=( $(cat ooo) )
for i in ${myarr[@]}; do
basename $i
done