使用Unix awk/sed/grep从文本文件中删除完整的URL

3

我有一个文本文件,里面包含推特的形式,我现在遇到了删除完整url的问题。下面是文本文件的一个例子:

index.html

this is a tweet that has info. http://google.com
this is a tweet that has an image. pic.twitter.com/a2y4H1b2Jq

我想创建一个新文件,只包含以下内容:
this is a tweet that has info.
this is a tweet that has an image.

我现在正在使用grep工具,

grep -oP "http://\K[^']+" final.txt

谢谢!


1
URL是否总是最后一个字段? - anubhava
如果您想要删除这些URI,那么sed怎么样?也许可以扩展一个命令,如sed -i 's#http://[a-z] # #g' filewithuris.txt。 - Marc Bredt
考虑到您可能需要或者说使用grep过滤文件不止一次,例如grep regex1 final.txt | grep regex2。通常情况下,使用多个正则表达式来获取匹配行为的变化比尝试让一个正则表达式完成所有工作更加明智。您可以使用一个正则表达式来匹配https?://以获取具有方案的URL,另一个正则表达式来匹配看起来没有方案的URL。 - Andy Lester
pic.twitter.com/a2y4H1b2Jq 不是一个“完整的URL”。因此,使用 grep 查找 http.... 显然无法找到它...也许你应该更具体地说明你真正想做什么... - twalberg
2个回答

1
sed 's/http[^ ]*//g' YourFile  

[^ ]*正在捕获所有非空格字符


1
取决于您想要多么严格。

完整的URL以HTTP开头并在两侧具有分隔符:

sed -e 's|\bhttp[^ ]*\.[^ ]*\b||g' test.html

任何带有分隔符的点号:

sed -e 's|\b[^ ]*\.[^ ]*\b||g' test.html

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接