仅解析特定文本

时间:2014-08-12 22:49:52

标签: bash curl awk sed grep

我已经将我的grepping缩小到基本上只列出了列出CustName的行。这是来自domaintools,基本上使用curl抓取信息。

以下是命令输出的示例:

grep -E -o "CustName.{120}" file
242:CustName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Akamai&nbsp;Technologies<br/>Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs

正如你所看到的,120只代表CustName之后的字符,我认为这也是对其他搜索的安全赌注。我想要的唯一信息是Akamai Technologies。如何在<br/>之前以最有效的方式解析这些数据?

注意,这只是一个域,另一个域可能有更多的单词,所以我不能在这里使用Awk和字段分隔符。谢谢你的帮助。

4 个答案:

答案 0 :(得分:1)

试试这个

sed 's/\(&nbsp;\)\+/ /g;s?<br/>.*??;s/^.*: //'

答案 1 :(得分:0)

在一些基于示例行的快速编写的示例行中,以下似乎有效:

sed -n '/CustName/{s/^.*CustName://;s/^\(&nbsp;\)\+//;s/\(&nbsp;\)\+/ /g;s/<br\/>.*$//p}'

答案 2 :(得分:0)

不需要grep:

$ cat file
foo
242:CustName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Akamai&nbsp;Technologies<br/>Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
bar
242:CustName:&nbsp;&nbsp;&nbsp;Some&nbsp;Other&nbsp;Company&nbsp;Name<br/>Address:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs
whatever

$ awk -F': +|<' '/CustName:/{gsub(/&nbsp;/," "); print $2}' file
Akamai Technologies
Some Other Company Name

答案 3 :(得分:0)

这是另一个awk命令:

awk -F: '$2 ~ /Cust/ { $0 = $3; gsub(/&nbsp;/, " ")
         gsub(/(^[ \t]+|[ \t]*<br.*$)/, ""); print }' file

输出:

Akamai Technologies

要完全匹配使用==代替:

awk -F: '$2 == "CustName" { $0 = $3; gsub(/&nbsp;/, " ")
         gsub(/(^[ \t]+|[ \t]*<br.*$)/, ""); print }' file

或者

awk -v name="CustName" -F: '$2 == name { $0 = $3; gsub(/&nbsp;/, " ")
                            gsub(/(^[ \t]+|[ \t]*<br.*$)/, ""); print }' file