Text-Processing
Curl 和 Grep 解析內容
我需要解析
curl
命令的輸出:curl --user test:test http://192.168.1.1/security/pkm.html | egrep '@company|config.pkm.password'
這將返回:
<input type="text" id="config.pkm.dentity" name="config.pkm.identity" value="00259E951451@company.net" maxlength="64" /> <input type="text" id="config.pkm.inner_identity" name="config.pkm.inner_identity" value="test@company.net" maxlength="64" /> <input type="password" id="config.pkm.password" name="config.pkm.password" value="382738" maxlength="64" />
我想搜尋
name="config.pkm.identity"
並列印00259E951451@company.net
、搜尋並name="config.pkm.inner_identity"
列印test@company.net
、搜尋name="config.pkm.password"
並列印382738
Grep 只輸出
00259E951451@company.net
,test@company.net
和382738
.
您確實應該為此使用 HTML 解析器,但是(脆弱的)Awk 解決方案是:
awk -F'"' '/pkm.identity/ {id = $8}; /inner_/ {inner = $8}; /password/ {pass = $8} END {print id" "inner" "pass}' file 00259E951451@company.net test@company.net 382738
要以查詢方式獲取資訊,您應該使用
grep
. 因此,嘗試使用(或)命令過濾掉curl
輸出:sed``awk
sed -n 's/.*name="config.pkm.identity" value="\(.[^"]*\)".*$/\1/p'
其中欄位值的值在
\1
(正則表達式擷取組 #1)中擷取。這將輸出name欄位的值為config.pkm.identity
。名稱是使用
config.pkm.password
:sed -n 's/.*name="config.pkm.password" value="\(.[^"]*\)".*$/\1/p'
等等。
要顯示相應名稱的所有可用值,只需使用:
sed -n 's/.*name=".*" value="\(.[^"]*\)".*$/\1</p'
更新評論
要在 sed 的查詢中選擇匹配值,請使用以下方案:使用帶有
|
管道符號的附加正則表達式分組,表示OR
語句。這允許sed
從給定的一組變體中進行選擇以匹配最終結果(還要注意轉義|
管道符號和(
)
括號)例如:
sed -n -e 's/.*name="\(config.pkm.identity\|config.pkm.inner_identity\|config.pkm.password\)" value="\(.[^"]*\)".*$/\2/p'
這將在流中搜尋和輸出
config.pkm.identity
,config.pkm.inner_identity
和config.pkm.password
名稱的數據。另請注意,最終的正則表達式擷取組參考是
\2
- 現在是第二組。