1、文本處理工具
一、grep工具
二、cut工具
三、sort工具
四、uniq工具
五、tee工具
六、diff工具
七、paste工具
2、bash的特性
一、命令和文件自動補全
2 、經常使用的通配符
三、bash中的引號前端
grep是==行==過濾工具;用於根據關鍵字進行行過濾git
語法:shell
# grep [選項] '關鍵字' 文件名
常見選項:vim
OPTIONS: -i: 不區分大小寫 -v: 查找不包含指定內容的行,反向選擇 -w: 按單詞搜索 -o: 打印匹配關鍵字 -c: 統計匹配到的行數 -n: 顯示行號 -r: 逐層遍歷目錄查找 -A: 顯示匹配行及後面多少行 -B: 顯示匹配行及前面多少行 -C: 顯示匹配行先後多少行 -l:只列出匹配的文件名 -L:列出不匹配的文件名 -e: 使用正則匹配 -E:使用擴展正則匹配 ^key:以關鍵字開頭 key$:以關鍵字結尾 ^$:匹配空行 --color=auto :能夠將找到的關鍵詞部分加上顏色的顯示
顏色顯示(別名設置):後端
臨時設置: # alias grep='grep --color=auto' //只針對當前終端和當前用戶生效 永久設置: 1)全局(針對全部用戶生效) vim /etc/bashrc alias grep='grep --color=auto' source /etc/bashrc 2)局部(針對具體的某個用戶) vim ~/.bashrc alias grep='grep --color=auto' source ~/.bashrc
舉例說明:bash
==說明:不要直接使用/etc/passwd文件,將其拷貝到/tmp下作實驗!==ide
# grep -i root passwd 忽略大小寫匹配包含root的行 # grep -w ftp passwd 精確匹配ftp單詞 # grep -w hello passwd 精確匹配hello單詞;本身添加包含hello的行到文件 # grep -wo ftp passwd 打印匹配到的關鍵字ftp # grep -n root passwd 打印匹配到root關鍵字的行好 # grep -ni root passwd 忽略大小寫匹配統計包含關鍵字root的行 # grep -nic root passwd 忽略大小寫匹配統計包含關鍵字root的行數 # grep -i ^root passwd 忽略大小寫匹配以root開頭的行 # grep bash$ passwd 匹配以bash結尾的行 # grep -n ^$ passwd 匹配空行並打印行號 # grep ^# /etc/vsftpd/vsftpd.conf 匹配以#號開頭的行 # grep -v ^# /etc/vsftpd/vsftpd.conf 匹配不以#號開頭的行 # grep -A 5 mail passwd 匹配包含mail關鍵字及其後5行 # grep -B 5 mail passwd 匹配包含mail關鍵字及其前5行 # grep -C 5 mail passwd 匹配包含mail關鍵字及其先後5行
cut是==列==截取工具,用於列的截取工具
語法:測試
# cut 選項 文件名
常見選項:ui
-c: 以字符爲單位進行分割,截取 -d: 自定義分隔符,默認爲製表符\t -f: 與-d一塊兒使用,指定截取哪一個區域
舉例說明:
# cut -d: -f1 1.txt 以:冒號分割,截取第1列內容 # cut -d: -f1,6,7 1.txt 以:冒號分割,截取第1,6,7列內容 # cut -c4 1.txt 截取文件中每行第4個字符 # cut -c1-4 1.txt 截取文件中每行的1-4個字符 # cut -c4-10 1.txt 截取文件中每行的4-10個字符 # cut -c5- 1.txt 從第5個字符開始截取後面全部字符
sort工具用於排序;它將文件的每一行做爲一個單位,從首字符向後,依次按ASCII碼值進行比較,最後將他們按升序輸出。
-u :去除重複行 -r :降序排列,默認是升序 -o : 將排序結果輸出到文件中,相似重定向符號> -n :以數字排序,默認是按字符排序 -t :分隔符 -k :第N列 -b :忽略前導空格。 -R :隨機排序,每次運行的結果均不一樣
舉例說明
# sort -n -t: -k3 1.txt 按照用戶的uid進行升序排列 # sort -nr -t: -k3 1.txt 按照用戶的uid進行降序排列 # sort -n 2.txt 按照數字排序 # sort -nu 2.txt 按照數字排序而且去重 # sort -nr 2.txt # sort -nru 2.txt # sort -nru 2.txt # sort -n 2.txt -o 3.txt 按照數字排序並將結果重定向到文件 # sort -R 2.txt # sort -u 2.txt
uniq用於去除==連續==的==重複==行
常見選項: -i: 忽略大小寫 -c: 統計重複行次數 -d:只顯示重複行 舉例說明: # uniq 2.txt # uniq -d 2.txt # uniq -dc 2.txt
tee工具是從標準輸入讀取並寫入到標準輸出和文件,即:雙向覆蓋重定向(屏幕輸出|文本輸入)
選項: -a 雙向追加劇定向 # echo hello world # echo hello world|tee file1 # cat file1 # echo 999|tee -a file1 # cat file1
diff工具用於逐行比較文件的不一樣
注意:diff描述兩個文件不一樣的方式是告訴咱們==怎樣改變第一個==文件以後==與第二個文件匹配==。
語法:
diff [選項] 文件1 文件2
經常使用選項:
選項 | 含義 | 備註 |
---|---|---|
-b | 不檢查空格 | |
-B | 不檢查空白行 | |
-i | 不檢查大小寫 | |
-w | 忽略全部的空格 | |
--normal | 正常格式顯示(默認) | |
-c | 上下文格式顯示 | |
-u | 合併格式顯示 |
舉例說明:
[root@MissHou ~]# cat file1 aaaa 111 hello world 222 333 bbb [root@MissHou ~]# [root@MissHou ~]# cat file2 aaa hello 111 222 bbb 333 world
1)正常顯示
diff目的:file1如何改變才能和file2匹配 [root@MissHou ~]# diff file1 file2 1c1,2 第一個文件的第1行須要改變(c=change)才能和第二個文件的第1到2行匹配 < aaaa 小於號"<"表示左邊文件(file1)文件內容 --- ---表示分隔符 > aaa 大於號">"表示右邊文件(file2)文件內容 > hello 3d3 第一個文件的第3行刪除(d=delete)後才能和第二個文件的第3行匹配 < hello world 5d4 第一個文件的第5行刪除後才能和第二個文件的第4行匹配 < 333 6a6,7 第一個文件的第6行增長(a=add)內容後才能和第二個文件的第6到7行匹配 > 333 須要增長的內容在第二個文件裏是333和world > world
2)上下文格式顯示
[root@MissHou ~]# diff -c file1 file2 前兩行主要列出須要比較的文件名和文件的時間戳;文件名前面的符號***表示file1,---表示file2 *** file1 2019-04-16 16:26:05.748650262 +0800 --- file2 2019-04-16 16:26:30.470646030 +0800 *************** 我是分隔符 *** 1,6 **** 以***開頭表示file1文件,1,6表示1到6行 ! aaaa !表示該行須要修改才與第二個文件匹配 111 - hello world -表示須要刪除該行才與第二個文件匹配 222 - 333 -表示須要刪除該行才與第二個文件匹配 bbb --- 1,7 ---- 以---開頭表示file2文件,1,7表示1到7行 ! aaa 表示第一個文件須要修改才與第二個文件匹配 ! hello 表示第一個文件須要修改才與第二個文件匹配 111 222 bbb + 333 表示第一個文件須要加上該行才與第二個文件匹配 + world 表示第一個文件須要加上該行才與第二個文件匹配
3)合併格式顯示
[root@MissHou ~]# diff -u file1 file2 前兩行主要列出須要比較的文件名和文件的時間戳;文件名前面的符號---表示file1,+++表示file2 --- file1 2019-04-16 16:26:05.748650262 +0800 +++ file2 2019-04-16 16:26:30.470646030 +0800 @@ -1,6 +1,7 @@ -aaaa +aaa +hello 111 -hello world 222 -333 bbb +333 +world
默認狀況下也會比較兩個目錄裏相同文件的內容 [root@MissHou tmp]# diff dir1 dir2 diff dir1/file1 dir2/file1 0a1 > hello Only in dir1: file3 Only in dir2: test1 若是隻須要比較兩個目錄裏文件的不一樣,不須要進一步比較文件內容,須要加-q選項 [root@MissHou tmp]# diff -q dir1 dir2 Files dir1/file1 and dir2/file1 differ Only in dir1: file3 Only in dir2: test1
其餘小技巧:
有時候咱們須要以一個文件爲標準,去修改其餘文件,而且修改的地方較多時,咱們能夠經過打補丁的方式完成。
1)先找出文件不一樣,而後輸出到一個文件 [root@MissHou ~]# diff -uN file1 file2 > file.patch -u:上下文模式 -N:將不存在的文件看成空文件 2)將不一樣內容打補丁到文件 [root@MissHou ~]# patch file1 file.patch patching file file1 3)測試驗證 [root@MissHou ~]# diff file1 file2 [root@MissHou ~]#
paste工具用於合併文件行
經常使用選項: -d:自定義間隔符,默認是tab -s:串行處理,非並行
##8. tr工具
tr用於字符轉換,替換和刪除;主要用於==刪除文件中控制字符==或進行==字符轉換==
語法:
用法1:命令的執行結果交給tr處理,其中string1用於查詢,string2用於轉換處理 # commands|tr 'string1' 'string2' 用法2:tr處理的內容來自文件,記住要使用"<"標準輸入 # tr 'string1' 'string2' < filename 用法3:匹配string1進行相應操做,如刪除操做 # tr options 'string1' < filename
經常使用選項:
-d 刪除字符串1中全部輸入字符。 -s 刪除全部重複出現字符序列,只保留第一個;即將重複出現字符串壓縮爲一個字符串
常匹配字符串:
字符串 | 含義 | 備註 |
---|---|---|
==a-z==或[:lower:] | 匹配全部小寫字母 | [a-zA-Z0-9] |
==A-Z==或[:upper:] | 匹配全部大寫字母 | |
==0-9==或[:digit:] | 匹配全部數字 | |
[:alnum:] | 匹配全部字母和數字 | |
[:alpha:] | 匹配全部字母 | |
[:blank:] | 全部水平空白 | |
[:punct:] | 匹配全部標點符號 | |
[:space:] | 全部水平或垂直的空格 | |
[:cntrl:] | 全部控制字符 | \f Ctrl-L 走行換頁<br/>\n Ctrl-J 換行 |
\r Ctrl-M 回車
\t Ctrl-I tab鍵 |
舉例說明:
[root@MissHou shell01]# cat 3.txt 本身建立該文件用於測試 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 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin boss02:x:516:511::/home/boss02:/bin/bash vip:x:517:517::/home/vip:/bin/bash stu1:x:518:518::/home/stu1:/bin/bash mailnull:x:47:47::/var/spool/mqueue:/sbin/nologin smmsp:x:51:51::/var/spool/mqueue:/sbin/nologin aaaaaaaaaaaaaaaaaaaa bbbbbb111111122222222222233333333cccccccc hello world 888 666 777 999 # tr -d '[:/]' < 3.txt 刪除文件中的:和/ # cat 3.txt |tr -d '[:/]' 刪除文件中的:和/ # tr '[0-9]' '@' < 3.txt 將文件中的數字替換爲@符號 # tr '[a-z]' '[A-Z]' < 3.txt 將文件中的小寫字母替換成大寫字母 # tr -s '[a-z]' < 3.txt 匹配小寫字母並將重複的壓縮爲一個 # tr -s '[a-z0-9]' < 3.txt 匹配小寫字母和數字並將重複的壓縮爲一個 # tr -d '[:digit:]' < 3.txt 刪除文件中的數字 # tr -d '[:blank:]' < 3.txt 刪除水平空白 # tr -d '[:space:]' < 3.txt 刪除全部水平和垂直空白
# ifconfig eth0|grep 'Bcast'|tr -d '[a-zA-Z ]'|cut -d: -f2,3,4 10.1.1.1:10.1.1.255:255.255.255.0 # ifconfig eth0|grep 'Bcast'|tr -d '[a-zA-Z ]'|cut -d: -f2,3,4|tr ':' '\n' 10.1.1.1 10.1.1.255 255.255.255.0 # ifconfig eth0|grep 'HWaddr'|cut -d: -f2-|cut -d' ' -f4 00:0C:29:25:AE:54 # ifconfig eth0|grep 'HW'|tr -s ' '|cut -d' ' -f5 00:0C:29:B4:9E:4E # ifconfig eth1|grep Bcast|cut -d: -f2|cut -d' ' -f1 # ifconfig eth1|grep Bcast|cut -d: -f2|tr -d '[ a-zA-Z]' # ifconfig eth1|grep Bcast|tr -d '[:a-zA-Z]'|tr ' ' '@'|tr -s '@'|tr '@' '\n'|grep -v ^$ # ifconfig eth0|grep 'Bcast'|tr -d [:alpha:]|tr '[ :]' '\n'|grep -v ^$ # ifconfig eth1|grep HWaddr|cut -d ' ' -f11 # ifconfig eth0|grep HWaddr|tr -s ' '|cut -d' ' -f5 # ifconfig eth1|grep HWaddr|tr -s ' '|cut -d' ' -f5 # ifconfig eth0|grep 'Bcast'|tr -d 'a-zA-Z:'|tr ' ' '\n'|grep -v '^$'
# grep 'bash$' passwd |grep -v 'root'|cut -d: -f1,2,7|tr ':' '\t' |tee abc.txt
Tab只能補全==命令和文件== (RHEL6/Centos6)
##二、常見的快捷鍵
^c 終止前臺運行的程序 ^z 將前臺運行的程序掛起到後臺 ^d 退出 等價exit ^l 清屏 ^a |home 光標移到命令行的最前端 ^e |end 光標移到命令行的後端 ^u 刪除光標前全部字符 ^k 刪除光標後全部字符 ^r 搜索歷史命令
*: 匹配0或多個任意字符 ?: 匹配任意單個字符 [list]: 匹配[list]中的任意單個字符,或者一組單個字符 [a-z] [!list]: 匹配除list中的任意單個字符 {string1,string2,...}:匹配string1,string2或更多字符串 # rm -f file* # cp *.conf /dir1 # touch file{1..5}
[root@MissHou dir1]# echo "$(hostname)" server [root@MissHou dir1]# echo '$(hostname)' $(hostname) [root@MissHou dir1]# echo "hello world" hello world [root@MissHou dir1]# echo 'hello world' hello world [root@MissHou dir1]# echo $(date +%F) 2018-11-22 [root@MissHou dir1]# echo `echo $(date +%F)` 2018-11-22 [root@MissHou dir1]# echo `date +%F` 2018-11-22 [root@MissHou dir1]# echo `echo `date +%F`` date +%F [root@MissHou dir1]# echo $(echo `date +%F`) 2018-11-22
————————————本文到此結束,感謝閱讀————————————