cut命令用來顯示行中的指定部分
cut [選項] 文件名
-f 列號
:第幾列提取
-d 分隔符
:按照指定分隔符分隔列,若不設置,默認爲製表符(Tab鍵)
[root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# cut -f 2 report.md Name Zhang Li Wang
[root/tmp]# cut -f 2,4 report.md Name Score Zhang 99 Li 68 Wang 100
:
分隔的 /etc/passwd
文件[root/tmp]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash ...省略n行... memcached:x:996:995:Memcached daemon:/run/memcached:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root/tmp]# cut -f 1,7 -d ":" /etc/passwd root:/bin/bash bin:/sbin/nologin sync:/bin/sync mail:/sbin/nologin nobody:/sbin/nologin sshd:/sbin/nologin veewee:/bin/bash vagrant:/bin/bash ...省略n行... memcached:/sbin/nologin apache:/sbin/nologin
[root/tmp]# grep '/bin/bash' /etc/passwd | cut -f 1 -d ":" /etc/passwd | grep -v root veewee:/bin/bash vagrant:/bin/bash
cut 命令只能夠分析分隔符清晰,格式很是工整的文件,相似
df
這類的輸出內容徹底無能爲力。
[root/tmp]# df -h | cut -f 5 文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 8.4G 1.8G 6.7G 21% / devtmpfs 490M 0 490M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 6.7M 491M 2% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 497M 133M 365M 27% /boot vagrant 62G 58G 4.4G 93% /vagrant tmpfs 100M 0 100M 0% /run/user/1001 [root/tmp]# df -h | cut -f 5 -d ' ' 1.8G
printf命令格式化並輸出結果到標準輸出。
printf命令並不會自動加入換行符,若是須要換行,須要手工加入換行符。
printf '[輸出類型][輸出格式]' [內容]
%ns
:輸出字符串。n是數字,指代輸出幾個字符。
%nd
:輸出整數。n是數字,指代輸出幾個數字。
\n
:換行
\r
:回車
\t
:水平製表符(Tab鍵)
[root/tmp]# echo 1 2 3 4 5 6 1 2 3 4 5 6 [root/tmp]# printf 1 2 3 4 5 6 1[root/tmp]#
[root/tmp]# printf '%s' 1 2 3 4 5 6 123456[root/tmp]# printf '%s\n' 1 2 3 4 5 6 1 2 3 4 5 6 [root/tmp]# printf '%s%s\n' 1 2 3 4 5 6 12 34 56 [root/tmp]# printf '%s%s %s\n' 1 2 3 4 5 6 12 3 45 6 [root/tmp]# printf '%s%s %s%s\n' 1 2 3 4 5 6 12 34 56
[root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# cat report.md | printf printf: 用法:printf [-v var] 格式 [參數]
[root/tmp]# printf '%s\n' $(cat report.md) ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100 [root/tmp]# printf '%s\t%s\t%s\t%s\n' $(cat report.md) ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
awk '條件1{動做1} 條件2{動做2} ...' 文件名
通常使用關係表達式做爲條件
x>10
x<10
x>=10
x<=10
x==10
格式化輸出
流程控制語句
awk 命令的輸出中支持 print 和 printf 命令
[root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# awk '{print $2 "\t" $4}' report.md Name Score Zhang 99 Li 68 Wang 100 [root/tmp]# cut -f 2,4 report.md Name Score Zhang 99 Li 68 Wang 100
df -h
文件系統 容量 已用 可用 已用% 掛載點 /dev/mapper/centos-root 8.4G 1.8G 6.7G 21% / devtmpfs 490M 0 490M 0% /dev tmpfs 497M 0 497M 0% /dev/shm tmpfs 497M 6.7M 491M 2% /run tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 497M 133M 365M 27% /boot vagrant 62G 58G 4.4G 93% /vagrant tmpfs 100M 0 100M 0% /run/user/1001
[root/tmp]# df -h | awk '{print $5}' 已用% 21% 0% 0% 2% 0% 27% 93% 0%
[root/tmp]# df -h | grep '/dev/mapper/centos-root' | awk '{print $5}' 21%
[root/tmp]# df -h | grep '/dev/mapper/centos-root' | awk '{print $5}' | cut -d '%' -f 1 21
BEGIN語句塊在awk開始從輸入流中讀取行以前被執行,這是一個可選的語句塊,好比變量初始化、打印輸出表格的表頭等語句一般能夠寫在BEGIN語句塊中。END語句塊在awk從輸入流中讀取完全部的行以後即被執行,好比打印全部行的分析結果這類信息彙總都是在END語句塊中完成,它也是一個可選語句塊。正則表達式
[root/tmp]# df -h | awk 'BEGIN{print "I am begining"}END{print "I am end"}{print $5}' I am begining 已用% 21% 0% 0% 2% 0% 27% 93% 0% I am end
- awk
-F '[分隔符]'
'條件1{動做1} 條件2{動做2} ...' 文件名- awk 'BEGIN{FS="[分隔符]"} 條件1{動做1} 條件2{動做2} ...' 文件名
:
分隔的 /etc/passwd
文件內容[root/tmp]# cat /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash ...省略n行... memcached:x:996:995:Memcached daemon:/run/memcached:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
/etc/passwd
中的第一列和第七列[root/tmp]# cat /etc/passwd | awk -F ':' '{print $1 "\t\t" $7}' root /bin/bash bin /sbin/nologin sync /bin/sync mail /sbin/nologin nobody /sbin/nologin sshd /sbin/nologin veewee /bin/bash vagrant /bin/bash ...省略n行... memcached /sbin/nologin apache /sbin/nologin
[root/tmp]# cat /etc/passwd | awk 'BEGIN{FS=":"} {print $1 "\t\t" $7}' root /bin/bash bin /sbin/nologin sync /bin/sync mail /sbin/nologin nobody /sbin/nologin sshd /sbin/nologin veewee /bin/bash vagrant /bin/bash ...省略n行... memcached /sbin/nologin apache /sbin/nologin
通常使用關係表達式做爲條件
x>10
x<10
x>=10
x<=10
x==10
[root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# cat report.md | grep -v ID | awk '$4 > 80 {print $2}' Zhang Wang
[root/tmp]# cat report.md | grep -v ID | awk '$4 < 80 {print $2}' Li
[root/tmp]# cat report.md | grep -v ID | awk '$4 >= 99 {print $2}' Zhang Wang
[root/tmp]# cat report.md | grep -v ID | awk '$4 <= 99 {print $2}' Zhang Li
[root/tmp]# cat report.md | grep -v ID | awk '$4 == 100 {print $2}' Wang
sed 名令是一種幾乎包括在全部Unix平臺(包括Linux)的輕量級流編輯器。
sed 命令主要用來對數據進行選取、替換、刪除、新增。
sed [選項] '[動做]' [文件名]
-n
:通常sed命令會輸出全部數據,若是加入此選項,則只會輸出通過sed命令處理的行。
-e
:容許對輸入數據應用多條sed命令編輯。
-i
:通常sed命令只會將編輯結果輸出到屏幕,若是加入此選項,則會直接修改讀取數據的文件。
p
:打印,輸出指定的行。
i
:插入,在當前行前插入一行或多行。
a
:追加,在當前行後添加一行或多行。
d
:刪除,刪除指定的行。
c
:行替換,用c後面的字符串替換原數據行。
s
:字符串替換,用一個字符串替換另一個字符串。格式爲[行範圍]s/[舊字符串]/[新字符串]/g
(與vim編輯器的替換格式相似)。
-n
的話默認是輸出文件全部數據[root/tmp]# sed '2p' report.md ID Name Gender Score 1 Zhang F 99 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# sed -n '2p' report.md 1 Zhang F 99
[root/tmp]# sed -n '1,3p' report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68
[root/tmp]# sed '1i Begin' report.md Begin ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100 [root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# sed '1a End' report.md ID Name Gender Score End 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# sed '2,4d' report.md ID Name Gender Score [root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# sed '1c Hello World' report.md Hello World 1 Zhang F 99 2 Li M 68 3 Wang M 100 [root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# sed '5c Hello World' report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
sed [-i] '[行範圍]s/[舊字符串]/[新字符串]/g' 文件名
-i
:加-i
只會修改源文件;不加的話只會將編輯結果輸出到屏幕,不會修改源文件。
結尾的g
爲全局替換,若不加,則只會替換每一行第一個符合條件的字符串
[舊字符串]
能夠應用正則表達式
n
表示只替換第 n 行的內容m,n
表示替換 從第 m 行到第 n 行的內容n,$
表示替換 從第 n 行一直到文件結尾的內容[root/tmp]# cat -n passwd 1 rootxroot/root/bin/bash 2 binxbin/bin/sbin/nologin 3 syncxsync/sbin/bin/sync 4 mailxmail/var/spool/mail/sbin/nologin 5 nobodyxNobody//sbin/nologin 6 sshdxSSH/var/empty/sshd/sbin/nologin 7 veeweex/home/veewee/bin/bash 8 vagrantx/home/vagrant/bin/bash 9 memcachedxMemcached/run/memcached/sbin/nologin 10 apachexApache/usr/share/httpd/sbin/nologin
數字:
替換爲 '*',直接修改源文件[root/tmp]# sed -i 's/[0-9]\{1,\}:/\*/g' passwd [root/tmp]# cat -n passwd 1 root:x:**root:/root:/bin/bash 2 bin:x:**bin:/bin:/sbin/nologin 3 sync:x:**sync:/sbin:/bin/sync 4 mail:x:**mail:/var/spool/mail:/sbin/nologin 5 nobody:x:**Nobody:/:/sbin/nologin 6 sshd:x:**SSH:/var/empty/sshd:/sbin/nologin 7 veewee:x:**:/home/veewee:/bin/bash 8 vagrant:x:**:/home/vagrant:/bin/bash 9 memcached:x:**Memcached:/run/memcached:/sbin/nologin 10 apache:x:**Apache:/usr/share/httpd:/sbin/nologin
[root/tmp]# sed -i '9s/emcached/em/g' passwd [root/tmp]# cat -n passwd 1 root:x:**root:/root:/bin/bash 2 bin:x:**bin:/bin:/sbin/nologin 3 sync:x:**sync:/sbin:/bin/sync 4 mail:x:**mail:/var/spool/mail:/sbin/nologin 5 nobody:x:**Nobody:/:/sbin/nologin 6 sshd:x:**SSH:/var/empty/sshd:/sbin/nologin 7 veewee:x:**:/home/veewee:/bin/bash 8 vagrant:x:**:/home/vagrant:/bin/bash 9 mem:x:**Mem:/run/mem:/sbin/nologin 10 apache:x:**Apache:/usr/share/httpd:/sbin/nologin
方法一:多條命令以分號分隔apache
[root/tmp]# sed '5s/Nobody/no/g;10s/Apache/apa/g' passwd root:x:**root:/root:/bin/bash bin:x:**bin:/bin:/sbin/nologin sync:x:**sync:/sbin:/bin/sync mail:x:**mail:/var/spool/mail:/sbin/nologin nobody:x:**no:/:/sbin/nologin sshd:x:**SSH:/var/empty/sshd:/sbin/nologin veewee:x:**:/home/veewee:/bin/bash vagrant:x:**:/home/vagrant:/bin/bash mem:x:**Mem:/run/mem:/sbin/nologin apache:x:**apa:/usr/share/httpd:/sbin/nologin
方法二:使用 -e
容許對輸入數據應用多條sed命令編輯vim
[root/tmp]# sed -i -e '5s/Nobody/no/g' -e '10s/Apache/apa/g' passwd [root/tmp]# cat -n passwd 1 root:x:**root:/root:/bin/bash 2 bin:x:**bin:/bin:/sbin/nologin 3 sync:x:**sync:/sbin:/bin/sync 4 mail:x:**mail:/var/spool/mail:/sbin/nologin 5 nobody:x:**no:/:/sbin/nologin 6 sshd:x:**SSH:/var/empty/sshd:/sbin/nologin 7 veewee:x:**:/home/veewee:/bin/bash 8 vagrant:x:**:/home/vagrant:/bin/bash 9 mem:x:**Mem:/run/mem:/sbin/nologin 10 apache:x:**apa:/usr/share/httpd:/sbin/nologin
:
替換爲製表符(\t
)[root/tmp]# sed -i 's/:/\t/g' passwd [root/tmp]# cat -n passwd 1 root x **root /root /bin/bash 2 bin x **bin /bin /sbin/nologin 3 sync x **sync /sbin /bin/sync 4 mail x **mail /var/spool/mail /sbin/nologin 5 nobody x **no / /sbin/nologin 6 sshd x **SSH /var/empty/sshd /sbin/nologin 7 veewee x ** /home/veewee /bin/bash 8 vagrant x ** /home/vagrant /bin/bash 9 mem x **Mem /run/mem /sbin/nologin 10 apache x **apa /usr/share/httpd /sbin/nologin
[root/tmp]# sed -i '5,$s/x/w/g' passwd [root/tmp]# cat -n passwd 1 root x **root /root /bin/bash 2 bin x **bin /bin /sbin/nologin 3 sync x **sync /sbin /bin/sync 4 mail x **mail /var/spool/mail /sbin/nologin 5 nobody w **no / /sbin/nologin 6 sshd w **SSH /var/empty/sshd /sbin/nologin 7 veewee w ** /home/veewee /bin/bash 8 vagrant w ** /home/vagrant /bin/bash 9 mem w **Mem /run/mem /sbin/nologin 10 apache w **apa /usr/share/httpd /sbin/nologin
將數據進行排序,並將排序結果標準輸出。
sort [選項] [文件名]
-n
:以數值型進行排序,默認是使用字符串型排序
-r
:反向排序
-f
:忽略大小寫
-t
:執行分隔符,默認的分隔符是製表符
-k n[,m]
:按照指定的字段範圍排序。從第n字段開始,第m字段結束(默認到行尾)
[root/tmp]# cat passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin sshd:x:74:74:SSH:/var/empty/sshd:/sbin/nologin veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash memcached:x:996:995:Memcached:/run/memcached:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root/tmp]# sort passwd apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin memcached:x:996:995:Memcached:/run/memcached:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin root:x:0:0:root:/root:/bin/bash sshd:x:74:74:SSH:/var/empty/sshd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync vagrant:x:1001:1001::/home/vagrant:/bin/bash veewee:x:1000:1000::/home/veewee:/bin/bash
[root/tmp]# sort -r passwd veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash sync:x:5:0:sync:/sbin:/bin/sync sshd:x:74:74:SSH:/var/empty/sshd:/sbin/nologin root:x:0:0:root:/root:/bin/bash nobody:x:99:99:Nobody:/:/sbin/nologin memcached:x:996:995:Memcached:/run/memcached:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin bin:x:1:1:bin:/bin:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
[root/tmp]# sort -t ":" -k 3,3 passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync sshd:x:74:74:SSH:/var/empty/sshd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin memcached:x:996:995:Memcached:/run/memcached:/sbin/nologin
-n
選項[root/tmp]# sort -n -t ":" -k 3,3 passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync mail:x:8:12:mail:/var/spool/mail:/sbin/nologin apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin sshd:x:74:74:SSH:/var/empty/sshd:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin memcached:x:996:995:Memcached:/run/memcached:/sbin/nologin veewee:x:1000:1000::/home/veewee:/bin/bash vagrant:x:1001:1001::/home/vagrant:/bin/bash
[root/var]# du -s * | sort -nr 130440 lib 57584 cache 49800 tmp 7500 log 12 spool 8 db 0 var 0 run 0 opt 0 mail 0 lock 0 local
統計文件的行數、單詞數和字符數
wc [選項] 文件名
-l
:只統計行數
-w
:只統計單詞數
-m
:只統計字符數
[root/tmp]# cat report.md ID Name Gender Score 1 Zhang F 99 2 Li M 68 3 Wang M 100
[root/tmp]# wc report.md 4 16 57 report.md
[root/tmp]# wc -l report.md 4 report.md