2010-06-02 44 views

回答

49

awk

awk '$2 == "LINUX" { print $0 }' test.txt 

一個很好的介紹請參見awk by Exampleawk

sed

sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt 

一個很好的介紹,以sedsed by Example

+0

LINUX可以Linux或Linux? – yael 2010-06-02 11:52:51

+0

我鏈接的頁面解釋瞭如何在各個工具中使用正則表達式。匹配LINUX或Linux的正則表達式是L(INUX | inux)(粗略地說,不同的工具有時會有稍微不同的語法)。順便說一句,如果這是家庭作業,它應該被標記爲這樣。 – 2010-06-02 12:40:42

+0

如果你想讓這個匹配完全不區分大小寫,請查看'awk'中的'toupper'(或'tolower')函數。 – 2010-06-02 14:39:26

4

嘗試這些了:

egrep -i '^\w+ LINUX ' myfile 

awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile 

sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile 

編輯:修改不區分大小寫

+0

這個問題明確提到'awk'(和'sed'在評論中)。 – 2010-06-02 11:33:30

+0

LINUX可以Linux或Linux? – yael 2010-06-02 11:52:18

3

在GNU sed不區分大小寫的匹配可以使用I修改進行:

sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip' 

將有力匹配的 「Linux」, 「Linux的」, 「LINUX」, 「LINUX」 和其他人作爲第二個字段(在第一個字段之後,可能是任意非空格字符)並且被任何數量(至少一個)任意空格(主要是空格和製表符,儘管您可以使用[:blank:]將其嚴格限制爲這些)進行包圍。

4

這是您可以使用的情況下,美麗的成語awk:這是

awk '$2=="LINUX"' file 

  • awk在一個真正的狀態時,默認操作是打印當前行。
  • 由於$2 == "LINUX"只要第二個字段是LINUX就是true,這將打印出發生這種情況的那些行。

如果你要打印所有匹配LINUX不管行如果是大寫或小寫,使用toupper()能夠利用他們都:

awk 'toupper($2)=="LINUX"' file 

或者IGNORECASE與這兩種syntaxs的:

awk 'BEGIN {IGNORECASE=1} $2=="LINUX"' file 
awk -v IGNORECASE=1 '$2=="LINUX"' file