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

ivo*_*ivo 1 regex sed

我想请求我的正则表达式的帮助.我需要从每个URL中提取最后一部分.我在下面的示例中将其标记为"to_extract".

我想知道以下正则表达式与sed一起使用时出了什么问题:

sed 's/^[ht|f]tp.*\///' file.txt
Run Code Online (Sandbox Code Playgroud)

file.txt的示例内容:

http://a/b/c/to_extract
ftp://a/b/c/to_extract
...
Run Code Online (Sandbox Code Playgroud)

我只获得了ftp链接的正确结果,而不是http.在此先感谢您对此的解释.一世.

Den*_*ret 8

更改[ht|f]到(ht|f),这将提供更好的结果.

[abc]指"一个字符是a,b或c".

[ht|f]意思是"一个字符是h,t,|或者f",而不是在所有你想要的东西.

在某些版本的sed上,您必须使用该-r选项调用它,以便可以使用扩展的正则表达式:

sed -r 's/^(ht|f)tp.*\///' file.txt
Run Code Online (Sandbox Code Playgroud)

如果你只想提取网址的最后一部分而不想要任何其他内容,你可能想要

sed -rn 's/^(ht|f)tp.*\///p' file.txt
Run Code Online (Sandbox Code Playgroud)

  • 如果没有`-r`,你需要在许多`sed`方言中反斜杠括号和管道字符.您应该发现`sed'/ \n(ht\| f \)tp /'`也适用于GNU`sed'. (2认同)