1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
我需要在awk打印所有行中$2
是LINUX
。
1 LINUX param1 value1
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4
我需要在awk打印所有行中$2
是LINUX
。
在awk
:
awk '$2 == "LINUX" { print $0 }' test.txt
一個很好的介紹請參見awk
by Example到awk
。
在sed
:
sed -n -e '/^[0-9][0-9]* LINUX/p' test.txt
一個很好的介紹,以sed
見sed
by Example。
LINUX可以Linux或Linux? – yael 2010-06-02 11:52:51
我鏈接的頁面解釋瞭如何在各個工具中使用正則表達式。匹配LINUX或Linux的正則表達式是L(INUX | inux)(粗略地說,不同的工具有時會有稍微不同的語法)。順便說一句,如果這是家庭作業,它應該被標記爲這樣。 – 2010-06-02 12:40:42
如果你想讓這個匹配完全不區分大小寫,請查看'awk'中的'toupper'(或'tolower')函數。 – 2010-06-02 14:39:26
嘗試這些了:
egrep -i '^\w+ LINUX ' myfile
awk '{IGNORECASE=1}{if ($2 == "LINUX") print}' myfile
sed -ne '/^[0-9]* [Ll][Ii][Nn][Uu][Xx] /p' myfile
編輯:修改不區分大小寫
這個問題明確提到'awk'(和'sed'在評論中)。 – 2010-06-02 11:33:30
LINUX可以Linux或Linux? – yael 2010-06-02 11:52:18
在GNU sed
不區分大小寫的匹配可以使用I
修改進行:
sed -n '/^[^[:space:]][[:space:]]\+linux[[:space:]]\+/Ip'
將有力匹配的 「Linux」, 「Linux的」, 「LINUX」, 「LINUX」 和其他人作爲第二個字段(在第一個字段之後,可能是任意非空格字符)並且被任何數量(至少一個)任意空格(主要是空格和製表符,儘管您可以使用[:blank:]
將其嚴格限制爲這些)進行包圍。
這是您可以使用的情況下,美麗的成語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
更好,如果它是由sed THX – yael 2010-06-02 11:14:25