【问题标题】:Formatting wget spider output to only include successful urls将 wget 蜘蛛输出格式化为仅包含成功的 url
【发布时间】:2018-03-22 01:02:51
【问题描述】:

我正在从一个 bash shell 脚本运行 wget,它是这样的:

input=$1

#iterate input text file line by line and run following on each line:

wget -a links.log -nv --spider line_n_url

问题是输出有很多 404 错误,甚至确实存在的 url 的格式如下:

2017-10-10 11:35:46 URL: http://someurl.com/somefile.ext 200 OK

有没有办法格式化 wget 写入的输出或轻松 sed 对其进行排序?

另一个问题是 .ext 是三种可能的类型,这使得匹配更加困难..

我所追求的是每个现有的 URL 在其自己的行中没有时间戳,URL:200 OK

http://someurl.com/somefile.ext
http://someurl.com/somefile2.ex2
http://someurl.com/somefile3.exp

谢谢。

【问题讨论】:

    标签: shell awk sed scripting wget


    【解决方案1】:

    据我了解,您正在尝试仅过滤 200 OK 消息。您应该在此处查看 awk,因此您可以在 bash 脚本中执行以下操作:

    $ wget -a links.log -nv --spider line_n_url 2>&1 | awk '/200 OK/{print $4}'
    http://someurl.com/somefile.ext
    

    如果你想要唯一的网址,你可以这样做:

    awk '/200 OK/{print $4}' | sort | uniq
    

    或:

    awk '/200 OK/{a[$4]++}END{for (i in a) print i}'
    

    重要提示:您必须将 stderr 重定向到 stdout,如下所示:

    $ wget -nv --spider http://google.com 2>&1 | awk '/200 OK/{print $4}'
    http://www.google.nl/?gfe_rd=cr&dcr=0&ei=qgHdWa2MEqTVXsONudgM
    

    【讨论】:

    • 您可能需要对它们进行排序。
    • 是的,你可以。让我们温柔一点。我会把它添加到答案中。
    • 我在想 uniq 可能需要根据输入对它们进行排序。没有钝的意思。 :)
    • 不用担心。我的错。
    • 我可以使用cat output.log | awk '/200 OK/{print $4}',但我无法在脚本中使用 wget。 output.log 和输出到 shell 仍然包括所有其他行和不需要的字符,即使我使用你提到的管道。我做错了什么或者 wget 不喜欢被管道?
    猜你喜欢
    • 2013-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多