日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux Shell常用技巧(六)

發布時間:2024/4/15 linux 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux Shell常用技巧(六) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

十二.?? 行的排序命令sort:

? 1.? sort命令行選項:

選項描述
-t字段之間的分隔符
-f基于字符排序時忽略大小寫
-k定義排序的域字段,或者是基于域字段的部分數據進行排序
-m將已排序的輸入文件,合并為一個排序后的輸出數據流
-n以整數類型比較字段
-o outfile將輸出寫到指定的文件
-r倒置排序的順序為由大到小,正常排序為由小到大
-u只有唯一的記錄,丟棄所有具有相同鍵值的記錄
-b忽略前面的空格


?? 2.? sort使用實例:
??? 提示:在下面的輸出結果中紅色標注的為第一排序字段,后面的依次為紫、綠。
?? ?/> sed -n '1,5p' /etc/passwd > users
?? ?/> cat users
?? ?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

?? ?#-t定義了冒號為域字段之間的分隔符,-k 2指定基于第二個字段正向排序(字段順序從1開始)。
?? ?/> sort -t':' -k 1 users
??? adm:x:3:4:adm:/var/adm:/sbin/nologin
??? bin:x:1:1:bin:/bin:/sbin/nologin
??? daemon:x:2:2:daemon:/sbin:/sbin/nologin
??? lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
??? root:x:0:0:root:/root:/bin/bash

?? ?#還是以冒號為分隔符,這次是基于第三個域字段進行倒置排序。
?? ?/> sort -t':' -k 3r users
?? ?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
?? ?adm:x:3:4:adm:/var/adm:/sbin/nologin
?? ?daemon:x:2:2:daemon:/sbin:/sbin/nologin
?? ?bin:x:1:1:bin:/bin:/sbin/nologin
?? ?root:x:0:0:root:/root:/bin/bash

?? ?#先以第六個域的第2個字符到第4個字符進行正向排序,在基于第一個域進行反向排序。
??? /> sort -t':' -k 6.2,6.4 -k 1r users
??? bin:x:1:1:bin:/bin:/sbin/nologin
??? root:x:0:0:root:/root:/bin/bash
??? daemon:x:2:2:daemon:/sbin:/sbin/nologin
??? lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
??? adm:x:3:4:adm:/var/adm:/sbin/nologin

?? ?#先以第六個域的第2個字符到第4個字符進行正向排序,在基于第一個域進行正向排序。和上一個例子比,第4和第5行交換了位置。
?? ?/> sort -t':' -k 6.2,6.4 -k 1 users
?? ?bin:x:1:1:bin:/bin:/sbin/nologin
?? ?root:x:0:0:root:/root:/bin/bash
?? ?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

?? ?#基于第一個域的第2個字符排序
?? ?/> sort -t':' -k 1.2,1.2 users?? ?
?? ?daemon:x:2:2:daemon:/sbin:/sbin/nologin
?? ?adm:x:3:4:adm:/var/adm:/sbin/nologin
?? ?bin:x:1:1:bin:/bin:/sbin/nologin
?? ?root:x:0:0:root:/root:/bin/bash
?? ?lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

?? ?#基于第六個域的第2個字符到第4個字符進行正向排序,-u命令要求在排序時刪除鍵值重復的行。
??? /> sort -t':' -k 6.2,6.4 -u users
?? ?bin:x:1:1:bin:/bin:/sbin/nologin
?? ?root:x:0:0:root:/root:/bin/bash
?? ?daemon:x:2:2:daemon:/sbin:/sbin/nologin
?? ?adm:x:3:4:adm:/var/adm:/sbin/nologin

??? /> cat /etc/passwd | wc -l? #計算該文件中文本的行數。
?? ?39
??? /> sed -n '35,$p' /etc/passwd > users2? #取最后5行并輸出到users2中。
??? /> cat users2
?? ?sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
?? ?mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
?? ?pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
?? ?gdm:x:42:42::/var/lib/gdm:/sbin/nologin
?? ?stephen:x:500:500:stephen:/home/stephen:/bin/bash

?? ?#基于第3個域字段以文本的形式排序
??? /> sort -t':' -k 3 users2
?? ?mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
?? ?gdm:x:42:42::/var/lib/gdm:/sbin/nologin
?? ?pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
?? ?stephen:x:500:500:stephen:/home/stephen:/bin/bash
?? ?sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

?? ?#基于第3個域字段以數字的形式排序
??? /> sort -t':' -k 3n users2
?? ?mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
?? ?gdm:x:42:42::/var/lib/gdm:/sbin/nologin
?? ?sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
?? ?pulse:x:496:494:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
?? ?stephen:x:500:500:stephen:/home/stephen:/bin/bash

?? ?#基于當前系統執行進程的owner名排序,并將排序的結果寫入到result文件中
??? /> ps -ef | sort -k 1 -o result

十三. 刪除重復行的命令uniq:

?? ?uniq有3個最為常用的選項,見如下列表:

選項命令描述
-c可在每個輸出行之前加上該行重復的次數
-d僅顯示重復的行
-u顯示為重復的行

??? /> cat testfile
?? ?hello
?? ?world
?? ?friend
?? ?hello
?? ?world
?? ?hello

?? ?#直接刪除未經排序的文件,將會發現沒有任何行被刪除
?? ?/> uniq testfile ?
?? ?hello
?? ?world
?? ?friend
?? ?hello
?? ?world
?? ?hello

?? ?#排序之后刪除了重復行,同時在行首位置輸出該行重復的次數
?? ?/> sort testfile | uniq -c ?
??? 1 friend
??? 3 hello
??? 2 world

?? ?#僅顯示存在重復的行,并在行首顯示該行重復的次數
?? ?/> sort testfile | uniq -dc
??? 3 hello
??? 2 world

??? #僅顯示沒有重復的行
??? /> sort testfile | uniq -u
?? ?friend ?


十四. 文件壓縮解壓命令tar:

? ?1.? tar命令行選項

選項命令描述
-c建立壓縮檔案
-x解壓
--delete從壓縮包中刪除已有文件,如果該文件在包中出現多次,該操作其將全部刪除。
-t查看壓縮包中的文件列表
-r向壓縮歸檔文件末尾追加文件
-u更新原壓縮包中的文件
-z壓縮為gzip格式,或以gzip格式解壓
-j壓縮為bzip2格式,或以bzip2格式解壓
-v顯示壓縮或解壓的過程,該選項一般不適于后臺操作
-f使用檔案名字,這個參數是最后一個參數,后面只能接檔案名。


?? ?2.? tar使用實例:
?? ?#將當前目錄下所有文件壓縮打包,需要說明的是很多人都習慣將tar工具壓縮的文件的擴展名命名為.tar
??? /> tar -cvf test.tar *
?? ?-rw-r--r--. 1 root root?? 183 Nov 11 08:02 users
?? ?-rw-r--r--. 1 root root?? 279 Nov 11 08:45 users2

??? /> cp ../*.log .????????????????? #從上一層目錄新copy一個.log文件到當前目錄。
??? /> tar -rvf test.tar *.log ?? ?#將擴展名為.log的文件追加到test.tar包里。
??? /> tar -tvf test.tar
?? ?-rw-r--r-- root/root??????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root??????? 279 2011-11-11 08:45 users2
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:16 install.log

??? /> touch install.log?????????? #使原有的文件更新一下最新修改時間
??? /> tar -uvf test.tar *.log??? #重新將更新后的log文件更新到test.tar中
??? /> tar -tvf test.tar???????????? #從輸出結果可以看出tar包中多出一個更新后install.log文件。
?? ?-rw-r--r-- root/root???????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root???????? 279 2011-11-11 08:45 users2
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:16 install.log
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:20 install.log

??? /> tar --delete install.log -f test.tar #基于上面的結果,從壓縮包中刪除install.log
?? ?-rw-r--r-- root/root?????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root?????? 279 2011-11-11 08:45 users2

??? /> rm -f users users2????? #從當前目錄將tar中的兩個文件刪除
??? /> tar -xvf test.tar????????? #解壓
??? /> ls -l users*?? ??? ??? ????? #僅列出users和users2的詳細列表信息
?? ?-rw-r--r--. 1 root root 183 Nov 11 08:02 users
?? ?-rw-r--r--. 1 root root 279 Nov 11 08:45 users2

?? ?#以gzip的格式壓縮并打包,解壓時也應該以同樣的格式解壓,需要說明的是以該格式壓縮的包習慣在擴展名后加.gz
??? /> tar -cvzf test.tar.gz *
??? /> tar -tzvf test.tar.gz????? #查看壓縮包中文件列表時也要加z選項(gzip格式)
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:50 install.log
?? ?-rw-r--r-- root/root???????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root???????? 279 2011-11-11 08:45 users2

??? /> rm -f users users2 install.log
??? /> tar -xzvf test.tar.gz???? #以gzip的格式解壓
??? /> ls -l *.log users*
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:50 install.log
?? ?-rw-r--r-- root/root???????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root???????? 279 2011-11-11 08:45 users2

??? /> rm -f test.*??????????????? #刪除當前目錄下原有的壓縮包文件
?? ?#以bzip2的格式壓縮并打包,解壓時也應該以同樣的格式解壓,需要說明的是以該格式壓縮的包習慣在擴展名后加.bz2
??? /> tar -cvjf test.tar.bz2 *
??? /> tar -tjvf test.tar.bz2?? ?#查看壓縮包中文件列表時也要加j選項(bzip2格式)
?? ?-rw-r--r-- root/root???? 48217 2011-11-11 22:50 install.log
?? ?-rw-r--r-- root/root???????? 183 2011-11-11 08:02 users
?? ?-rw-r--r-- root/root???????? 279 2011-11-11 08:45 users2

??? /> rm -f *.log user*
??? /> tar -xjvf test.tar.bz2??? #以bzip2的格式解壓
??? /> ls -l
?? ?-rw-r--r--. 1 root root 48217 Nov 11 22:50 install.log
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
?? ?-rw-r--r--. 1 root root???? 183 Nov 11 08:02 users
?? ?-rw-r--r--. 1 root root???? 279 Nov 11 08:45 users2

十五. 大文件拆分命令split:

?? ?下面的列表中給出了該命令最為常用的幾個命令行選項:

選項描述
-l指定行數,每多少分隔成一個文件,缺省值為1000行。
-b指定字節數,支持的單位為:k和m
-C與-b參數類似,但切割時盡量維持每行的完整性
-d生成文件的后綴為數字,如果不指定該選項,缺省為字母

??? /> ls -l
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2

??? /> split -b 5k test.tar.bz2???? #以每文件5k的大小切割test.tar.bz2
??? /> ls -l??????????????????????????????? #查看切割后的結果,缺省情況下拆分后的文件名為以下形式。
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
?? ?-rw-r--r--. 1 root root?? 5120 Nov 11 23:34 xaa
?? ?-rw-r--r--. 1 root root?? 5120 Nov 11 23:34 xab
?? ?-rw-r--r--. 1 root root? ?? 290 Nov 11 23:34 xac

??? /> rm -f x*???????????????????????? #刪除拆分后的小文件
??? /> split -d -b 5k test.tar.bz2 #-d選項以后綴為數字的形式命名拆分后的小文件
??? /> ls -l
?? ?-rw-r--r--. 1 root root 10530 Nov 11 23:08 test.tar.bz2
?? ?-rw-r--r--. 1 root root?? 5120 Nov 11 23:36 x00
?? ?-rw-r--r--. 1 root root ? 5120 Nov 11 23:36 x01
?? ?-rw-r--r--. 1 root root? ?? 290 Nov 11 23:36 x02

??? /> wc install.log -l???????????? #計算該文件的行數
??? /> split -l 300 install.log???? #每300行拆分成一個小文件
??? /> ls -l x*
?? ?-rw-r--r--. 1 root root 11184 Nov 11 23:42 xaa
?? ?-rw-r--r--. 1 root root 10805 Nov 11 23:42 xab
?? ?-rw-r--r--. 1 root root 12340 Nov 11 23:42 xac
?? ?-rw-r--r--. 1 root root 11783 Nov 11 23:42 xad
?? ?-rw-r--r--. 1 root root?? 2105 Nov 11 23:42 xae


總結

以上是生活随笔為你收集整理的Linux Shell常用技巧(六)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。