使用SED,AWK或GREP匹配文件中的URL模式

时间:2014-03-04 02:33:05

标签: regex unix sed awk grep

我正在尝试使用grep来提取以http开头并以jpg结尾的网址列表。

  

grep -o'pictureite.com/wp-content/uploads / .......'filename

上面的代码是我得到了多远。然后我需要将这些文件名传递给curl

  

标题:“家庭度假”,jpg:“http://picturesite.com/wp-content/uploads/2014/01/mypicture.jpg”,所有者:“PhotoTaker”

2 个答案:

答案 0 :(得分:0)

您可以通过执行以下操作来捕获url模式:

grep -o 'http.*.jpg' file

$ grep -o 'http.*.jpg' <<EOF
> title : "Family Vacation", jpg:"http://picturesite.com/wp-content/uploads/2014/01/mypicture.jpg", owner : "PhotoTaker
> EOF 
http://picturesite.com/wp-content/uploads/2014/01/mypicture.jpg

curl不会从标准输入中获取url,因此您最好的选择是将提取的url存储到文件中,然后一次读取一行文件并传递将行保存到curl命令的变量。

答案 1 :(得分:0)

sed -nr 's/http\S*(jpg\|gif\|other\|ext)/\
    curl $CURLOPTS & >$OUT/p' <$infile | sh -n

上面的命令将搜索$ infile以查找以“http”开头的任何字符串,后跟任意长度的非空白字符,并以任何“\ |”结尾括号中包含的分隔文件扩展名。

一旦发现这样的字符串sed将其替换为第二行的curl命令行以替换“&amp;”。然后它将命令字符串传递给sh以便执行。

请记住,sed是流编辑器,而不仅仅是流搜索器,因此它可以非常有效地预处理其他命令的输入,以使它们按照您的需要进行操作。

注意:sh当前传递的是'noexecute'参数,它基本上更像echo而不是其他任何东西。当你运行它几次并且满意的时候你正在做正确的事情,你需要将它移除以获得任何效果。

注2:如果您有可能想要每行匹配多个网址,则需要使用'g'sed选项。