2010-06-18 84 views
4

特定字段的值我有一個文件中的行看起來像下面如何使用grep來提取線

....... DisplayName="john" .......... 

其中....代表可變數量等領域。

使用以下grep命令,我能提取所有具有有效的「顯示名稱」字段

grep DisplayName="[0-9A-Za-z[:space:]]*" e:\test 

然而行,我希望從每一個只提取名稱(即「約翰」)而不是grep返回的整行。我試圖將流水線輸出到cut命令,但它不接受字符串分隔符。

回答

3

具體做法是:

sed 's/.*DisplayName="\(.*\)".*/\1/' 

應該做的,SED語義是S/subsitutethis/forthis /其中 「/」 是分隔符。與轉義1組合的轉義括號用於保留由圓括號指定的模式部分。該表達式將所有內容保留在displayname後面的括號內,並將其餘部分拋棄。

這也可以工作,而先用grep,如果你使用:

sed -n 's/.*DisplayName="\(.*\)".*/\1/p' 

-n選項和P標誌告訴sed只打印在修改行。

更多在:http://www.grymoire.com/Unix/Sed.html

3

這個工作對我來說:

awk -F "=" '/DisplayName/ {print $2}' 

返回"john"。刪除報價john用途:

awk -F "=" '/DisplayName/ {gsub("\"","");print $2}'