Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用curl和grep/sed/awk在HTML标记中获取时间_Regex_Bash_Curl_Awk_Sed - Fatal编程技术网

Regex 使用curl和grep/sed/awk在HTML标记中获取时间

Regex 使用curl和grep/sed/awk在HTML标记中获取时间,regex,bash,curl,awk,sed,Regex,Bash,Curl,Awk,Sed,我正试图从这个网页中提取到达时间。我正在OSX 10.9.5的终端上运行这个 我已经到了只隔离标签的地步 curl 'www.flyokc.com/arrivals.aspx' | grep 'labelTime' 然而,我在正则表达式方面很糟糕,所以我还没有从这些标签中抓取时间。我该怎么做呢 最后,我想按一天中的小时对它们进行分组,并按小时显示到达的数量,按降序排列。令人伤心的是,这似乎在此时对您的用例起作用: gawk ' BEGIN{ PROCINFO["sorted_in"]

我正试图从这个网页中提取到达时间。我正在OSX 10.9.5的终端上运行这个

我已经到了只隔离标签的地步

curl 'www.flyokc.com/arrivals.aspx' | grep 'labelTime'
然而,我在正则表达式方面很糟糕,所以我还没有从这些标签中抓取时间。我该怎么做呢


最后,我想按一天中的小时对它们进行分组,并按小时显示到达的数量,按降序排列。令人伤心的是,这似乎在此时对您的用例起作用:

gawk '
BEGIN{
    PROCINFO["sorted_in"]="@ind_num_asc"
    FS="[<>: ]+"
}
/labelTime/&&/ContentPlaceHolderMain/{
    if($6="PM") a[$4+12]+=1
    else a[$4]+=1
}
END{
    for(h in a)
        print h, a[h]
}' <(curl 'www.flyokc.com/arrivals.aspx' 2>/dev/null)
gawk'
开始{
PROCINFO[“排序在”]=“@ind\u num\u asc”
FS=“[:]”
}
/labelTime/&&/ContentPlaceHolderMain/{
如果($6=“PM”)a[$4+12]+=1
否则a[$4]+=1
}
结束{
对于(a中的h)
打印h,a[h]
}'/dev/null)
编辑:说明什么有效为什么:

  • 将字段分隔符设置为html分隔符、间距和HH:MM分隔符

  • 然后抓取第六个字段(小时) (这只是在某种意义上你要求的正则表达式…)

  • 如果第六个字段为“PM”,则添加12小时(您希望在最后进行数字排序)+1那一小时的计数

  • 处理输入后,显示结果。由于数组访问顺序已定义为按键进行数字排序,因此无需使用外部排序命令


用正则表达式解析HTML/XML不好。令人伤心的是,这似乎在此时对您的用例起作用:

gawk '
BEGIN{
    PROCINFO["sorted_in"]="@ind_num_asc"
    FS="[<>: ]+"
}
/labelTime/&&/ContentPlaceHolderMain/{
    if($6="PM") a[$4+12]+=1
    else a[$4]+=1
}
END{
    for(h in a)
        print h, a[h]
}' <(curl 'www.flyokc.com/arrivals.aspx' 2>/dev/null)
gawk'
开始{
PROCINFO[“排序在”]=“@ind\u num\u asc”
FS=“[:]”
}
/labelTime/&&/ContentPlaceHolderMain/{
如果($6=“PM”)a[$4+12]+=1
否则a[$4]+=1
}
结束{
对于(a中的h)
打印h,a[h]
}'/dev/null)
编辑:说明什么有效为什么:

  • 将字段分隔符设置为html分隔符、间距和HH:MM分隔符

  • 然后抓取第六个字段(小时) (这只是在某种意义上你要求的正则表达式…)

  • 如果第六个字段为“PM”,则添加12小时(您希望在最后进行数字排序)+1那一小时的计数

  • 处理输入后,显示结果。由于数组访问顺序已定义为按键进行数字排序,因此无需使用外部排序命令


如果您只是想了解到达时间,如下午12:00等。
awk
使用
curl
应该可以:

curl -s 'http://flyokc.com/arrivals.aspx' | awk '/labelTime/{print substr($2,68,5),substr($3,1,2)}'
输出:

12:47 PM
...
工作原理:


CURL
以静默方式获取网页的源代码,然后
AWK
获取输出并使用“labelTime”选择包含到达时间的行。由于awk获取字符串所在的整个
,因此子字符串用于从位置68开始,然后打印结果。

如果您只是想获取到达时间,如12:00 PM等。
awk
curl
配合使用应该可以:

curl -s 'http://flyokc.com/arrivals.aspx' | awk '/labelTime/{print substr($2,68,5),substr($3,1,2)}'
输出:

12:47 PM
...
工作原理:


CURL
以静默方式获取网页的源代码,然后
AWK
获取输出并使用“labelTime”选择包含到达时间的行。由于awk获取字符串所在的整个
,子字符串用于从位置68开始,然后打印结果。

您的意思是
curl'www.flyokc.com/arrivals.aspx'| grep-oP'labelTime'>\K[^]*'
?它不像curl'www.flyokc.com/arrivals.aspx'| grep-oP'labelTime'>\K[^]*'0用法:grep[-abcDEFGHhIiJLlmnOoPqRSsUVvwxZ][-A num][-B num][-C[num]][-e pattern][-f file][-二进制文件=value][-color=when][-context[=num][-directories=action][-label][-line-buffered][-null][pattern][file…]5 310k 5 17079 0 0 33998 0:00:09----0:00:09 33954 curl:(23)写入正文失败(0!=1448)请尝试使用xmllint解析html/xml。您的意思是
curl'www.flyokc.com/arrivals.aspx'| grep-oP'labelTime'>\K[^]*.
?它不喜欢curl'www.flyokc.com/arrivals.aspx'.\grep-oP'labelTime'>\K[^]*'0用法:grep[-abcdefghijllmnoopqrsuvwxz][-A][-num B num][-C][-e pattern][-e][-e][-f-labelTime][-binary file=value][--color=when][--context[=num][--directories=action][--label][--line buffered][--null][pattern][file…]5 310k 5 17079 0 33998 0 0 0:00:09--:---0:00:09 33954 curl:(23)写入正文失败(0!=1448)试着用xmllint解析html/xml。我从中得到的输出如下:22102342431314141471513131317171819205216这是一天中的小时数和计数,对吗?我从中得到的输出如下:2210234243131314141431617181985216这是一天中的小时数和计数,对吗?这是正确的,谢谢。另一个答案按小时分组并输出计数,但我后来添加了该请求。我感谢您的回答。这是正确的,谢谢。其他答案按小时分组并输出计数,但我后来添加了该请求。我感谢您的回答。