正则表达式帮助 - 出了什么问题?

时间:2014-04-22 06:53:55

标签: regex sed

我想请求我的正则表达式的帮助。我需要从每个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。 在此先感谢您对此的解释。 岛

2 个答案:

答案 0 :(得分:8)

[ht|f]更改为(ht|f),这会带来更好的效果。

[abc]表示"一个字符abc"。

[ht|f]表示"一个字符ht|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
相关问题