這個選項說的是, 只輸出匹配的部分.
在寫shell抓取網頁內容時, 開始不知道這個選項,
後來居然用上了perl的html::tokeparser,
我只想說, 喜新厭舊是人類最好的品質, 不然怎麼來那麼多創新…(心裡一陣自嘲),
雖然走了很多彎路, 但是也解決了問題.
場景還原如下:
乙份html內容(page.html), 裡面有幾個hidden的input, 內容簡化如下(前後的…表示其他內容):
...
type
="hidden"
name
="fd"
value
="q2m4nljn4agsaymtrsizaw6vnqry"
/>
type
="hidden"
name
="execution"
value
="e1s1"
/>
type
="hidden"
name
="_eventid"
value
="submit"
/>
...
這三個東西都比較關鍵, 想著給乙個name(如execution), 取出value(e1s1);
嘗試如下:
[root@localhost grep-o]
# cat page.html | grep 'name="execution" value="[a-za-z0-9-]\+".*>'
"hidden" name=
"execution" value=
"e1s1" />
這樣找到的是name=.../>
這部分
知道了有-o
引數(只輸出匹配的部分), 那就簡單了
[root@localhost grep-o]
# cat page.html | grep 'name="execution" value="[a-za-z0-9-]\+".*>' | grep -o 'e[0-9][0-9a-za-z]\+'
e1s1
沿用這個思路, 其他兩個也是類似的處理方法.
另附上當時寫的perl檔案, 以後少走彎路!
#!/usr/bin/perl –w
require html:
:tokeparser;
# 除錯用的模組, 類似php的var_dump
use data:
:dumper;
# 獲取登入頁面的隱藏欄位的內容
# usage:
# perl parsecontent.pl page.html
$loginhtml
=$argv[0
];# 登入頁面檔案
# $fieldname = $argv[1]; # 隱藏欄位的名字(name值)
# print $loginhtml;
$parser
= html:
:tokeparser->new(
"$loginhtml")||
die"can't open: $!"
;# 儲存名值, 關聯陣列
my@arr1=(
);while(my
$token
=$parser
->get_tag(
"input"))
# 沒有name的跳過
next
unless
my$name
=$token
->[1
];my$value
=$token
->[1
];$arr1
=$value
;# push @arr1, $name;
# push @arr1, $value;
# last; # break;
}# print dumper(@arr1);
# print $arr1 || '---';
$fieldfilename
='tmp/fields.txt'
;system(
"rm -rf $fieldfilename");
foreach
my$name
(keys %arr1
) >> $fieldfilename");
}
另外,附幾個實用的選項
歡迎補充指正!
Linux命令之 grep命令》
1.作用 linux系統中grep命令是一種強大的文字搜尋工具,它能使用正規表示式搜尋文字,並把匹配的行列印出來 也可以通過管道重定向流輸出到檔案中 grep全稱是global regular expression print,表示全域性正規表示式列印,它的使用許可權是所有使用者。2.格式 grep...
linux命令之grep命令
grep 命令是乙個十分強大的文字搜尋命令,它全面的搜尋滿足正規表示式文字內容並且可 以把對應的行 以及行號列印出來 基本格式 grep 選項 模式 檔案或者目錄 模式 是什麼呢?模式就是要搜尋的文字內容的正規表示式,當然也可以時最簡單的最直接的 文字。輸出是什麼呢,一般的輸出的是滿足有所要搜尋內容...
Linux命令之grep命令
grep命令是文字搜尋命令,它可以正規表示式搜尋文字,也可從乙個檔案中的內容作為搜尋關鍵字。grep的工作方式是這樣的,它在乙個或多個檔案中搜尋字串模板。如果模板包括空格,則必須被引用,模板後的所有字串被看作檔名。搜尋的結果被送到標準輸出,不影響原檔案內容。語法 grep option patter...