grep:(去除一行中需要的信息,同类与cut)

grep全称是Global Regular Expression Print

#常规用法
# grep -n root /etc/passwd
:root:x:::root:/root:/bin/bash
:operator:x:::operator:/root:/sbin/nologin #正则表达式用法
[root@www ~]# grep -n '[^g]oo' regular_express.txt
:apple is my favorite food.
:Football game is not use feet only.
:google is the best tools for search keyword.
:goooooogle yes!

cut:

[root@localhost ~]# cat /etc/passwd
root:x:::root:/root:/bin/bash
bin:x:::bin:/bin:/sbin/nologin
daemon:x:::daemon:/sbin:/sbin/nologin
adm:x:::adm:/var/adm:/sbin/nologin
lp:x:::lp:/var/spool/lpd:/sbin/nologin
sync:x:::sync:/sbin:/bin/sync
shutdown:x:::shutdown:/sbin:/sbin/shutdown
halt:x:::halt:/sbin:/sbin/halt
mail:x:::mail:/var/spool/mail:/sbin/nologin
operator:x:::operator:/root:/sbin/nologin
games:x:::games:/usr/games:/sbin/nologin
ftp:x:::FTP User:/var/ftp:/sbin/nologin
nobody:x:::Nobody:/:/sbin/nologin
............................
---------------------------------------------------------
[root@localhost ~]# cat /etc/passwd | cut -d ':' -f ,
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:

sed:(对行做处理)

[root@localhost ruby] # sed '1,2d' ab           #删除第一行到第二行

[root@localhost ruby] # sed -n '1,2p' ab        #显示第一行到第二行

[root@localhost ruby] # sed -n '/ruby/p' ab    #查询包括关键字ruby所在所有行

awk:(将一行分为多个字段做处理)(重点)

awk [-F  field-separator]  'commands'  input-file(s)
其中,commands 是真正awk命令,[-F域分隔符]是可选的。 input-file(s) 是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
#=========================================== [root@www ~]# last -n 5 <==仅取出前五行
root pts/1 192.168.1.100 Tue Feb 10 11:21 still logged in
root pts/1 192.168.1.100 Tue Feb 10 00:46 - 02:28 (01:41)
root pts/1 192.168.1.100 Mon Feb 9 11:41 - 18:30 (06:48)
dmtsai pts/1 192.168.1.100 Mon Feb 9 11:41 - 11:41 (00:00)
root tty1 Fri Sep 5 14:09 - 14:10 (00:01) #last -n 5 | awk '{print $1}' #取出第一个字段
root
root
root
dmtsai
root
#$0则表示所有域,$1表示第一个域,$n表示第n个域。默认域分隔符是"空白键" 或 "[tab]键",所以$1表示登录用户,$3表示登录用户ip,以此类推。 #===========================================
[chen@localhost scripts]$ cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin #cat /etc/passwd |awk -F ':' '{print $1}' #-F 指定分隔符为 :
root
daemon
bin
sys #cat /etc/passwd |awk -F ':' '{print $1"\t"$7}' #显示第1、7个字段
root /bin/bash
daemon /bin/sh
bin /bin/sh
sys /bin/sh #搜索/etc/passwd有root关键字的所有行,并显示对应的shell
# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash

其实awk可以像grep一样的去匹配第一行,就像这样: 查找某个字符

1
2
3
4
5
$ awk '/LISTEN/' netstat.txt
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN
tcp        0      0 :::22                   :::*                    LISTEN

取反,显示没有LISTEN的行:

awk '!/WAIT/' netstat.txt

df

04-17 00:36
查看更多