LINUX核心命令實戰總結四——檔案過濾及內容編輯處理命令一
1.1 cat:合併檔案或檢視檔案內容
【功能說明】
命令cat檢視檔案內容
命令cat的常用5個功能
序號 |
Cat常用功能 |
簡要例子說明 |
1 |
檢視檔案內容 |
例如:cat file1.txt |
2 |
把多個檔案合併在一起 |
例如:cat file1.txt file2.txt >>newfile.txt |
3 |
建立編輯新檔案 |
例如:輸入cat>file.txt,後面接要編輯的內容,使用快捷方式Ctrl+d或Ctrl+c可結束編輯。極少使用 |
4 |
非互動式的編輯或者追加內容到文傑尾部 |
這是生產工作中最重要的一個應用,所以要很熟練 例如:cat >> file.txt << EFO I am yanhuihuang I 24 year old EFO |
5 |
清空檔案內容 |
例如:使用cat /dev/null>file.txt命令就可以把檔案內容清空,但是檔案還是存在的,偶爾使用。 |
【語法格式】
cat [OPTION]... [FILE]...
cat [選項]... [檔案]...
【選項說明】
命令cat的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-n |
從1開始所有輸出的內容按行編號( |
-b |
和-n選項功能類似,但會忽略顯示空白行行號。 |
-s |
當遇到有連續兩行以上的空白行時,就替換為一行空白 |
-A |
等價於-vET三個選項的功能之和 |
-e |
等價於 -vE |
-E |
在每行結尾顯示$符號 |
-t |
與-vT等價 |
-T |
將Tab字元顯示為^1 |
-v |
除了LDF和TAB之外,使用^和-M引用 |
【使用範例】
基礎範例:
執行如下的完整命令生成test.txt檔案內容
[root@web01 ~]# cat > test.txt <<EFO > I love you> I am yanhuihuang > very good > EFO
以上執行過程及結果:
[root@web01 ~]# cat test.txt > I love you > I am yanhuihuang > very good you are very goodView Code
執行cat命令,分別帶-n及-b選項,並對區別
[root@web01 ~]# cat -n test.txt 1 > I love you 2 > I am yanhuihuang 3 > very good 4 5 6 7 8 9 10 11 you are very good [root@web01 ~]# cat -b test.txt 1 > I love you 2 > I am yanhuihuang 3 > very good 4 you are very goodView Code
執行cat命令,帶-E選項
[root@web01 ~]# cat -E test.txt > I love you$ > I am yanhuihuang$ > very good$ $ $ $ $ $ $ $ you are very good$View Code
執行cat命令,帶-s選項
[root@web01 ~]# cat -s test.txt > I love you > I am yanhuihuang > very good you are very goodView Code
執行cat命令編輯新文字
[root@web01 ~]# cat test2.txt hello world [root@web01 ~]# cat test.txt test2.txt > I love you > I am yanhuihuang > very good you are very good hello worldView Code
1.2 tac:反向顯示檔案內容
【功能說明】
命令tac是cat的反向拼寫
【語法格式】
tac [OPTION]... [FILE]...
tac [選項]... [檔案]...
【選項說明】
命令tac的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-b |
在行前而非行尾新增分隔標誌 |
-r |
將分隔標記視作正則表示式來解析 |
-s |
使用指定字串替換行作為分隔標誌 |
【使用範例】
命令cat和tac對比
[root@web01 ~]# cat /etc/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local >/etc/udev/rules.d/70-persistent-net.rules [root@web01 ~]# tac /etc/rc.local >/etc/udev/rules.d/70-persistent-net.rules touch /var/lock/subsys/local # want to do the full Sys V style init stuff. # You can put your own initialization stuff in here if you don't # This script will be executed *after* all the other init scripts. # #!/bin/shView Code
1.3 more:分頁顯示檔案內容
【功能說明】
命令more的功能類似於cat,但more會一頁一頁顯示內容。
【語法格式】
more [option] [file ...]
more [選項] [檔案...]
【選項說明】
命令more的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-num |
指定螢幕顯示大小為num行 |
+num |
從行號num開始顯示(*) |
-s |
把連續的多個空行顯示為一行 |
-p |
不滾屏,而是清除整個螢幕,然後顯示文字 |
-c |
不滾屏,而是從每一屏的頂部開始顯示文字,沒顯示完一行,就清除一行 |
命令more的交換式子命令及說明
引數選項 |
解釋說明(帶*的為重點) |
H或? |
檢視幫助 |
空格鍵 |
向下滾動一屏(*) |
z |
向下滾動一屏 |
Enter |
向下滾動一行 |
f |
向下滾動一屏 |
b |
向上滾動一屏 |
= |
輸出當前的行號 |
/檢視的文字 |
查詢指定的文字 |
:f |
輸出檔名和當前行的行號 |
v |
呼叫vi編輯器 |
!命令 |
呼叫shell並執行命令 |
q |
退出並儲存 |
【使用範例】
命令more後面不接任何引數
[root@web01 ~]# more /etc/services # /etc/services: # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $ # # Network services, Internet style # IANA services version: last updated 2009-11-10 ....... ....... echo 7/udp discard 9/tcp sink null discard 9/udp sink nullView Code
定義顯示行數
[root@web01 ~]# more -5 /etc/services # /etc/services: # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $ # # Network services, Internet style # IANA services version: last updated 2009-11-10View Code
從指定的行數開始顯示
[root@web01 ~]# more +888 /etc/services cableport-ax 282/tcp # Cable Port A/X cableport-ax 282/udp # Cable Port A/X rescap 283/tcp # rescap rescap 283/udp # rescap corerjd 284/tcp # corerjd corerjd 284/udpView Code
【技巧示範】
分頁顯示目錄下的內容
[root@web01 ~]# ls /etc/|more -10 abrt acpi adjtime aliases aliases.db alsa alternatives anacrontab asound.conf at.denyView Code
1.4 less:分頁顯示檔案內容
【功能說明】
命令less指標式記錄開啟文件,快速,消耗少量記憶體。
【語法格式】
less [option] [file]
less [選項] [文件]
【選項說明】
命令less的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-i |
搜尋時忽略大小寫 |
-m |
顯示類似於more命令的進度百分比 |
-N |
顯示每行行號 |
-s |
將連續的空行壓縮為一行顯示 |
-e |
當檔案顯示到結尾時自動退出檔案,若不使用此選項就需要使用互動命令q退出 |
【使用範例】
[root@web01 ~]# less /etc/services # /etc/services: # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $ # ...... ....... # http://www.iana.org/assignments/port-numbers # The Well Known Ports are those from 0 through 1023. # The Registered Ports are those from 1024 through 49151 # The Dynamic and/or PrivateView Code
顯示行號例子
[root@web01 ~]# less -N /etc/services 1 # /etc/services: 2 # $Id: services,v 1.48 2009/11/11 14:32:31 ovasik Exp $ 3 # 4 # Network services, Internet style 5 # IANA services version: last updated 2009-11-10View Code
【技巧性範例】
[root@web01 ~]# ls /etc/|less
abrt
acpi
adjtime
aliases
aliases.db
alsa
alternatives
anacrontab
asound.conf
at.deny
audisp
View Code
1.5 head:顯示檔案內部頭部
【功能說明】
命令head用於顯示檔案頭部,預設顯示檔案前10行
【語法格式】
head [OPTION]... [FILE]...
head [選項]... [檔案]...
【選項說明】
命令head引數及說明
引數選項 |
解釋說明(帶*的為重點) |
-n |
指定顯示的行數 |
-c |
指定顯示的位元組數 |
-q |
不顯示包含給定檔名的檔案頭 |
-v |
總是顯示包含給定檔名的資料夾 |
【使用範例】
預設顯示檔案的前10行例子
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/nologinView Code
顯示檔案的前n行
[root@web01 ~]# head -n 5 /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
顯示前n個位元組
[root@web01 ~]# head -c 10 /etc/passwd root:x:0:0[root@web01 ~]#
顯示檔案的最後n行或者n個位元組
[root@web01 ~]# head -n -21 /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/haltView Code
顯示多個檔案
[root@web01 ~]# head -1 /etc/passwd root:x:0:0:root:/root:/bin/bash
1.6 tail:顯示檔案內容尾部
【功能說明】
命令tail用於顯示檔案內容的尾部
【語法格式】
tail [OPTION]... [FILE]...
tail [選項]... [檔案]...
【選項說明】
命令tail的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-c |
指定顯示的位元組數 |
-n |
指定顯示的行數 |
-f |
實時輸出檔案變化後追加的資料(*) |
-F |
功能等同於-f --retry |
--retry |
不停地嘗試開啟檔案直到開啟為止,和-f引數和用 |
--pid |
與-f引數合用,在程序結束後自動退出tail命令 |
-s |
監督檔案變化的時間的間隔數(秒) |
-q |
不顯示包含給定檔名的檔案頭 |
-v |
總是顯示包含給定檔名的檔案頭 |
【使用範例】
[root@web01 ~]# tail /etc/passwd rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin yhh:x:500:500::/home/yhh:/bin/bashView Code
顯示檔案末尾5行的內容
[root@web01 ~]# tail -n 5 /etc/passwd postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin yhh:x:500:500::/home/yhh:/bin/bashView Code
從第十五行開始顯示檔案
[root@web01 ~]# tail -n +15 /etc/passwd nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin abrt:x:173:173::/etc/abrt:/sbin/nologin rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin haldaemon:x:68:68:HAL daemon:/:/sbin/nologin ntp:x:38:38::/etc/ntp:/sbin/nologin saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin tcpdump:x:72:72::/:/sbin/nologin oprofile:x:16:16:Special user account to be used by OProfile:/home/oprofile:/sbin/nologin yhh:x:500:500::/home/yhh:/bin/bashView Code
實時監控檔案變化
[root@web01 ~]# echo abc >> aa
[root@web01 ~]#
[root@web01 ~]# tail -f aa 111 222 abc
引數-F的使用
[root@web01 ~]# tail -f a tail: 無法開啟"a" 讀取資料: 沒有那個檔案或目錄 tail: 沒有剩餘檔案 [root@web01 ~]# tail -F a tail: 無法開啟"a" 讀取資料: 沒有那個檔案或目錄 ^C [root@web01 ~
1.7 tailf:跟蹤日誌檔案
【功能說明】
命令tailf幾乎和tail -f相同,不同的是如果檔案不增長,那麼它不會去訪問磁碟檔案,也不會更改檔案的訪問時間
【語法格式】
tailf [OPTION] file
tailf [選項] 檔案
【選項說明】
命令tailf的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-n |
指定顯示的行數,預設是最後10行 |
【使用範例】
跟蹤日誌檔案
[root@web01 ~]# tailf aa 111 222 abc abc1
[root@web01 ~]# echo abc1 >> aa
[root@web01 ~]#
1.8 cut:從文字中提取一段文字並輸入
【功能說明】
命令cut從檔案的每行剪下位元組,字元或欄位,並將這些位元組,字元或欄位輸出至標準輸出
【語法格式】
cut OPTION... [FILE]...
cut 選項... [檔案]...
【選項說明】
命令cut的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-b |
以位元組為單位進行分割 |
-n |
取消分隔多位元組字元,與選項-b一起使用 |
-c |
以位元組為單位進行分隔(*) |
-d |
自定義分隔符,預設以tab為分隔符 |
-f |
與-d一起使用,指定顯示那個區域(*) |
N |
第N個位元組,字元或欄位 |
N- |
從第N個位元組、字元或欄位開始至行尾(*) |
N-M |
從第N個到M個位元組、字元或欄位開始至行尾(*) |
-M |
從第1個到M個位元組、字元或欄位開始至行尾(*) |
【使用範例】
以位元組為分隔符
[root@web01 ~]# echo I am yanhuihuang my QQ is 88888888 >aa [root@web01 ~]# cat aa I am yanhuihuang my QQ is 88888888 [root@web01 ~]# cut -b -3 aa I a [root@web01 ~]# cut -b 3- aa am yanhuihuang my QQ is 88888888 [root@web01 ~]# cut -b -3,3- aa I am yanhuihuang my QQ is 88888888View Code
以位元組為分隔符(英文字母是單位元組字元)
[root@web01 ~]# cut -c 2-10 aa am yanhu [root@web01 ~]# cut -b 2-10 aa am yanhuView Code
自定義分隔例子
[root@web01 ~]# cut -d : -f 1 /etc/passwd root bin ........ ........ yanhuihuang yanhuihuang1View Code
1.9 split:分隔檔案
【功能說明】
命令split可以按照指定的行數或者指定檔案大小進行分隔
【語法格式】
split [OPTION]... [INPUT ] [PREFIX]
split [選項]... [輸入檔案 ] [輸出檔名字首]
【選項說明】
split [OPTION]... [INPUT ] [PREFIX]
split [選項]... [輸入檔案 ] [輸出檔名字首]
View Code
命令split的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-b |
指定分隔檔案的最大位元組數 |
-l |
指定分隔後文件的最大行數 |
-a |
指定字尾長度,預設為2位字母 |
-d |
使用數字字尾 |
【使用範例】
[root@web01 data]# split -l 10 inittab new_ [root@web01 data]# ls new* new_aa new_ab new_ac [root@web01 data]# split -l 10 -d inittab new2_ [root@web01 data]# wc -l new2_* 10 new2_00 10 new2_01 6 new2_02 10 new2_aaa 10 new2_aab 6 new2_aac 52 總用量View Code
按照檔案大小分隔
[root@web01 data]# split -b 1k -d inittab new3_ [root@web01 data]# ls new3* new3_00
1.10 paste:合併檔案
【功能說明】
命令paste能將檔案按照行與行進行合併,中間使用tab隔開。
【語法格式】
paste [OPTION]... [FILE]...
paste [選項]... [檔案]...
【選項說明】
命令paste的引數選項及說明
引數選項 |
解釋說明(帶*的為重點) |
-d |
指定合併的分隔符,預設是TAB(*) |
-s |
每個檔案佔用一行 |
【使用範例】
[root@web01 data]# paste test1 test2 1 aaaa 2 bbbbb 3 cccccc 4 5 6View Code
通過-d可以指定分隔符
[root@web01 data]# paste -d : test1 test2 1:aaaa 2:bbbbb 3:cccccc 4: 5:eeeeeeeeeeeeee 6:gggggggView Code
通過-s合併內容,使其成行
[root@web01 data]# paste -s test1 1 2 3 4 5 6 [root@web01 data]# paste -s test2 aaaa bbbbb cccccc eeeeeeeeeeeeee ggggggg [root@web01 data]# paste -s test1 test2 1 2 3 4 5 6 aaaa bbbbb cccccc eeeeeeeeeeeeee gggggggView Code
與cat命令合併文字的方式進行對比
[root@web01 data]# cat test1 test2 1 2 3 4 5 6 aaaa bbbbb cccccc eeeeeeeeeeeeee gggggggView Code
【生產案例】
假設通過shell指令碼生成的賬號密碼如下:
stu001
7f77sj
stu002
tsuydh
stu003
dhksnk
stu004
xdkack
stu005
dxhiai
stu006
nbkcac
stu007
dbakk1
stu008
dbm09s
View Code
現在要求使用命令將上面文字轉換成SVN服務配置檔案的賬號及密碼格式
stu001=7f77sj stu002=tsuydh stu003=dhksnk stu004=xdkack stu005=dxhiai stu006=nbkcac stu007=dbakk1 stu008=dbm09sView Code
方法一:
[root@web01 data]# paste -s test4 stu001 7f77sj stu002 tsuydh stu003 dhksnk stu004 xdkack stu005 dxhiai stu006 nbkcac stu007 dbakk1 stu008 dbm09s [root@web01 data]# paste -sd '=\n' test4 stu001=7f77sj stu002=tsuydh stu003=dhksnk stu004=xdkack stu005=dxhiai stu006=nbkcac stu007=dbakk1 stu008=dbm09s
方法二:
[root@web01 data]# paste -d '=' - - <test4 stu001=7f77sj stu002=tsuydh stu003=dhksnk stu004=xdkack stu005=dxhiai stu006=nbkcac stu007=dbakk1 stu008=dbm09s
方法三:xargs+sed命令實現
[root@web01 data]# xargs -n 2 < test4 stu001 7f77sj stu002 tsuydh stu003 dhksnk stu004 xdkack stu005 dxhiai stu006 nbkcac stu007 dbakk1 stu008 dbm09s [root@web01 data]# xargs -n 2 < test4|sed 's# #=#g' stu001=7f77sj stu002=tsuydh stu003=dhksnk stu004=xdkack stu005=dxhiai stu006=nbkcac stu007=dbakk1 stu008=dbm09sView Code
方法四:
[root@web01 data]# sed 'N;s#\n#=#g' test4 stu001=7f77sj stu002=tsuydh stu003=dhksnk stu004=xdkack stu005=dxhiai stu006=nbkcac stu007=dbakk1 stu008=dbm09s