Linux文本操作三大利器總結:sed、awk、grep


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM