grep:(去除一行中需要的信息,同類與cut)
grep全稱是Global Regular Expression Print
#常規用法 # grep -n root /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 30:operator:x:11:0:operator:/root:/sbin/nologin #正則表達式用法 [root@www ~]# grep -n '[^g]oo' regular_express.txt 2:apple is my favorite food. 3:Football game is not use feet only. 18:google is the best tools for search keyword. 19:goooooogle yes!
cut:
[root@localhost ~]# cat /etc/passwd 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 games:x:12:100:games:/usr/games:/sbin/nologin ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin ............................ --------------------------------------------------------- [root@localhost ~]# cat /etc/passwd | cut -d ':' -f 3,4 0:0 1:1 2:2 3:4 4:7 5:0 6:0 7:0 8:12 11:0 12:100 14:50 99:99 81:81 999:999 59:59 998:997 113:113 38:38 997:995
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
