仅打印第二个字段符合某些条件的行

时间:2010-06-02 11:13:25

标签: sed awk

我有

1 LINUX param1 value1 
2 LINUXparam2 value2
3 SOLARIS param3 value3
4 SOLARIS param4 value4

我需要awk来打印$2LINUX的所有行。

4 个答案:

答案 0 :(得分:66)

awk

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

有关awk的详细介绍,请参阅awk by Example

sed

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

有关sed的详细介绍,请参阅sed by Example

答案 1 :(得分: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

编辑:针对不区分大小写进行了修改

答案 2 :(得分:3)

在GNU sed中,可以使用I修饰符进行不区分大小写的匹配:

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

将强大匹配“linux”,“Linux”,“LINUX”,“LiNuX”等作为第二个字段(在第一个字段之后可能是任何非空白字符)并包围任何数量(至少一个)任何空格(主要是空格和制表符,尽管您可以使用[:blank:]将其限制为严格限制)。

答案 3 :(得分:1)

我的回答很晚,但是没有人提到:

awk '$2~/LINUX/' file