1. 程式人生 > >linux命令之grep的-o選項

linux命令之grep的-o選項

這個選項說的是, 只輸出匹配的部分.
在寫shell抓取網頁內容時, 開始不知道這個選項,
後來居然用上了perl的HTML::TokeParser,
我只想說, 喜新厭舊是人類最好的品質, 不然怎麼來那麼多創新…(心裡一陣自嘲),
雖然走了很多彎路, 但是也解決了問題.

場景還原如下:
一份html內容(page.html), 裡面有幾個hidden的input, 內容簡化如下(前後的…表示其他內容):

...
<input type="hidden" name="fd" value="Q2m4nLJN4aGSAYmtrsIZAw6vnQRy" />
<input type=
"hidden"
name="execution" value="e1s1" />
<input type="hidden" name="_eventId" value="submit" /> ...

這三個東西都比較關鍵, 想著給一個name(如execution), 取出value(e1s1);

嘗試如下:

[[email protected] grep-o]# cat page.html  | grep 'name="execution" value="[a-zA-Z0-9-]\+".*>'
<input type="hidden" name="execution"
value="e1s1" />

這樣找到的是name=.../>這部分

知道了有-o引數(只輸出匹配的部分), 那就簡單了

[[email protected] 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")) { # if (!$name) {continue;} # 沒有name的跳過 next unless my $name = $token->[1]{name}; my $value = $token->[1]{value}; $arr1{$name} = $value; # push @arr1, $name; # push @arr1, $value; # last; # break; } # print Dumper(@arr1); # print $arr1{$fieldName} || '---'; $fieldFilename = 'tmp/fields.txt'; system("rm -rf $fieldFilename"); foreach my $name (keys %arr1) { system("echo $name=$arr1{$name} >> $fieldFilename"); }

另外,附幾個實用的選項

  • -A --after-context=NUM print NUM lines of trailing context
    列印匹配行的緊隨的後面幾行
  • -C (-C num)列印上下幾行
  • -l (小寫字母l), 只打印包含匹配的檔名
  • -i 忽略大小寫
  • -r 遞迴查詢(對於在一個目錄下的檔案查詢非常有用)
  • -v 尋找不匹配的行

歡迎補充指正!

相關推薦

linux命令grep的-o選項

這個選項說的是, 只輸出匹配的部分. 在寫shell抓取網頁內容時, 開始不知道這個選項, 後來居然用上了perl的HTML::TokeParser, 我只想說, 喜新厭舊是人類最好的品質, 不然怎麼來那麼多創新…(心裡一陣自嘲), 雖然走了很多彎路, 但是也解

linux命令grep:過濾註釋行和空白行

star elastic art rep ber 空白 lan AS null cat elasticsearch.yml | grep "^\s*[^# \t].*$" cat elasticsearch.yml | grep -v ^# |grep -v ^$li

linux命令grep用法介紹

之前 -o 空字符 寫法 文本搜索工具 inter 正則表達 空白字符 符號 Linux系統中grep命令是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。grep全稱是Global Regular Expression Print,表示全局正則表

Linux命令grep用法

Linux命令之grep用法 Usage: grep [OPTION]… PATTERN [FILE]… 用法: grep [選項]…模式 [檔案]。 Search for PATTERN in each FILE or standard input. 在每個檔案或標準輸入中搜索模式

linux命令grep

grep (global search regular expression(RE) and print out the line,全面搜尋正則表示式 並把行打印出來)是一種強大的文字搜尋工具,它能使用正則表示式搜尋文字,並把匹配的行打印出來。Unix 的 grep 家族包括 grep、egrep 和 fgr

Linux基礎命令grep

模式匹配 lin 大小寫 表達式 ignore col -c 分組 nbsp grep : 根據pattern(模式)搜索文本,並將符合模式的文本行顯示出來,並不會修改原文件。 用法: grep [options] ‘ pattern ‘ /file #

Linux進階命令grep查找字符串

linux grep 目的:使用grep命令來查找文件中符合條件的字符串格式:grep 【選項】 【查找模式】 【文件名】查找字符串時希望顯示如下內容:1)所在的文件名-------------------------grep在查找時默認已經顯示目標文件名2)所在的行號--

Linux命令 ps,|,grep

1、Linux命令之 ps ps:將某個程序顯示出來         -A  顯示所有程式。          -e  此引數的效果和指定"A"引數相同。     &nb

Linux命令stty

repl 位置 而不是 connector 啟動 previous dsr 根據 pass 用途說明 stty命令用於顯示和修改終端行設置(change and print terminal line settings)。 常用參數 stty命令不帶參數可以打印終端行設置,

Linux命令kill

多種方式 輸入 字符 指定 避免 選項 con 擴展 firefox 精通Linux的kill命令    不管你使用哪種操作系統,你一定會遇到某個行為失常的應用,它把自己鎖死並拒絕關閉。在Linux(還有Mac)。你能夠用一個"kill"命令強制終結它。在這個教程中,我

Linux命令netstat

unknown 網絡相關 mes packet forward 提示 send 狀態 統計 Linux命令之netstat詳解 簡介 Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerad

linux 命令 apt-get

檢查 end 修正 blog font span man 損壞 /var/ apt-get 是一個下載安裝軟件包的簡單命令行接口 使用方法: apt-get [OPTIONS] [COMMANDS] [PACKAGE_NAMES] OPTIONS:

linux 命令 watch

html shell ati watch命令 art track pwd -s 周期 watch能夠幫你監測一個命令的執行結果,省得你一遍遍的手動執行。在Linux下。watch是周期性的執行下個程序。並全屏顯示執行結果。你能夠拿他來監測你想要的一切命令的結果變化,

Linux命令CP詳解

linux命令之cp詳解Linux命令之CP詳解嘿嘿,又一周過去了,大家過的怎麽樣呢,在這一周時間裏,小編可是又學到不少新知識呢。今天呢,小編就和大家分享一下Linux中我們常用的CP的命令,這裏的cp可是copy的簡寫噢。(容我嘚瑟一下) 學過linux的都知道,在我們操作的過程中,我們常常會用到cp這個命

linux命令head、tail命令具體解釋

-c pri fadein rip lin comment pen inux ont head 語法 樣例 tail 語法 樣例 head和tail組合使用方法舉例 head 語法 head [-n -k ].

Linux命令——id

命令 linux id id命令是查看用戶相關屬性信息。顯示真實有效的id(UID)和組ID(GID),UID是對應用戶的單一身份標識,GID則是對應多個UID。常用參數:  -g或--group  顯示用戶所屬群組的ID。  -G或--groups  顯示用戶所屬附加群組的ID。  -n或--n

linux 命令top

設置 smd gnome ont str 優先級 ive set tld top命令是顯示當前系統正在執行的進程相關信息。包含進程ID、內存占用率等;top命令格式例如以下: top [OPTIONS] OPTIONS: -b 批處理 -c

移位運算、Arrays中的copyOf、java.util.AbstractCollection、linux命令tail

xca eid width gte 技術分享 blank strac eba tail 移位運算:http://www.cnblogs.com/hongten/p/hongten_java_yiweiyunsuangfu.html。 ---------- Arrays中的c

Linux命令uptime

and sin bsp 登錄 logs 0.00 mage 查看 工具包 這是什麽 uptime用來查看系統已經啟動了多長時間了。 它顯示的信息和w命令的頭(第一行)是一樣一樣的。 舉個栗子 舉一個實際的應用場景: 比如發現服務器上的某些沒有加入開機啟動的服務掛了一

Linux命令命令查找方式

命令查找順序1 命令類型 linux中命令類型分為兩類,一類為shell中自帶的命令,即內部命令,而其它的在文件系統之上的命令程序,即外部命令. 內部命令的優點: 命令程序在內存中,使用更快捷 相關命令: type,enable type -