2021-05-12 14:32:11
Linux之基本文字處理工具
一.引言
Linux最重要的哲學思想就是:一切皆檔案。可見檔案及檔案操作在Linux當中是多麼的重要。在Linux系統中我們也會經常用到各種文字檔案處理的操作,熟練使用這些小巧精悍的文字處理工具,在關鍵時刻往往展現非凡的神奇功效。
二.關於輸入
Linux哲學中, 為了更好的組合各種命令達到更加強大的功能, 大多數文字處理命令的輸入既可以是檔案, 也可以是標准輸入, 如果沒有指定輸入檔案, 則預設從標準輸入讀資料. 輸出都是標準輸出, 方面傳給管道線的下一個命令, 想要輸出到檔案的話, 重定向下即可. 下面介紹的這些命令, 如無特殊說明, 則都可以從檔案或者標準輸入讀入資料。
三.文字輸出
(一).整個文字輸出
-
cat
cat命令的用途是連線檔案或標準輸入並列印。這個命令常用來顯示檔案內容,或者將幾個檔案連線起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。
1.命令格式:
cat [選項] [檔案]...
2.命令功能:
cat主要有三大功能:
1.一次顯示整個檔案:cat filename
2.從鍵盤建立一個檔案:cat > filename 只能建立新檔案,不能編輯已有檔案.
3.將幾個檔案合併為一個檔案:cat file1 file2 > file
3.命令引數:
-A, --show-all 等價於 -vET -b, --number-nonblank 對非空輸出行編號 -e 等價於 -vE -E, --show-ends 在每行結束處顯示 $ -n, --number 對輸出的所有行編號,由1開始對所有輸出的行數編號 -s, --squeeze-blank 有連續兩行以上的空白行,就代換為一行的空白行 -t 與 -vT 等價 -T, --show-tabs 將跳格字元顯示為 ^I -u (被忽略) -v, --show-nonprinting 使用 ^ 和 M- 參照,除了 LFD 和 TAB 之外
4.使用範例:
範例一:把 log2012.log 的檔案內容加上行號後輸入 log2013.log 這個檔案裡
命令:
cat -n log2012.log log2013.log
輸出:
[root@localhost test]# cat log2012.log 2012-01 2012-02 ====== [root@localhost test]# cat log2013.log 2013-01 2013-02 2013-03 ====== [root@localhost test]# cat -n log2012.log log2013.log 1 2012-01 2 2012-02 3 4 5 ====== 6 2013-01 7 2013-02 8 9 10 2013-03 11 ======
說明:
範例二:把 log2012.log 和 log2013.log 的檔案內容加上行號(空白行不加)之後將內容附加到 log.log 裡。
命令:
cat -b log2012.log log2013.log log.log
輸出:
[root@localhost test]# cat -b log2012.log log2013.log log.log 1 2012-01 2 2012-02 3 ====== 4 2013-01 5 2013-02 6 2013-03 7 ======
範例三:把 log2012.log 的檔案內容加上行號後輸入 log.log 這個檔案裡
命令:
輸出:
[root@localhost test]# cat log.log [root@localhost test]# cat -n log2012.log > log.log [root@localhost test]# cat -n log.log 1 2012-01 2 2012-02 3 4 5 ======
範例四:使用here doc來生成檔案
輸出:
[root@localhost test]# cat >log.txt <<EOF > Hello > World > Linux > PWD=$(pwd) > EOF [root@localhost test]# ls -l log.txt -rw-r--r-- 1 root root 37 10-28 17:07 log.txt [root@localhost test]# cat log.txt Hello World Linux PWD=/opt/soft/test [root@localhost test]#
說明:
注意粗體部分,here doc可以進行字串替換。
備註:
-
tac (反向列示)
命令:
tac log.txt
輸出:
[root@localhost test]# tac log.txt PWD=/opt/soft/test Linux World Hello
說明:
tac 是將 cat 反寫過來,所以他的功能就跟 cat 相反, cat 是由第一行到最後一行連續顯示在螢幕上,而 tac 則是由最後一行到第一行反向在螢幕上顯示出來!
-
rev (reverse)
這個命令和cat也是反的, 不過它不像tac那樣, 它輸出行的順序和cat也是一樣的, 不過輸出每行的時候, 先輸出最後一個字元, 接著是倒數第二個字元, 最後才是第一個字元, 下面這個命令可以把輸入全部倒過來:
[root@bash ~]# cat re one apple a day! two apple two day! [root@bash ~]# rev re !yad a elppa eno !yad owt elppa owt
-
nl (number lines)
nl命令在linux系統中用來計算檔案中行號。nl 可以將輸出的檔案內容自動的加上行號!其預設的結果與 cat -n 有點不太一樣, nl 可以將行號做比較多的顯示設計,包括位數與是否自動補齊 0 等等的功能。
1.命令格式:
nl [選項]... [檔案]...
2.命令引數:
-b :指定行號指定的方式,主要有兩種: -b a :表示不論是否為空行,也同樣列出行號(類似 cat -n); -b t :如果有空行,空的那一行不要列出行號(預設值); -n :列出行號表示的方法,主要有三種: -n ln :行號在螢幕的最左方顯示; -n rn :行號在自己欄位的最右方顯示,且不加 0 ; -n rz :行號在自己欄位的最右方顯示,且加 0 ; -w :行號欄位的占用的位數。 -p 在邏輯定界符處不重新開始計算。
3.命令功能:
nl 命令讀取 File 引數(預設情況下標准輸入),計算輸入中的行號,將計算過的行號寫入標準輸出。 在輸出中,nl 命令根據您在命令列中指定的標誌來計算左邊的行。 輸入文字必須寫在邏輯頁中。每個邏輯頁有頭、主體和頁尾節(可以有空節)。 除非使用 -p 標誌,nl 命令在每個邏輯頁開始的地方重新設定行號。 可以單獨為頭、主體和頁尾節設定行計算標誌(例如,頭和頁尾行可以被計算然而文字行不能)。
4.使用範例:
範例一:用 nl 列出 log2012.log 的內容
命令:
nl log2012.log
輸出:
[root@localhost test]# nl log2012.log 1 2012-01 2 2012-02 3 ======
說明:
檔案中的空白行,nl 不會加上行號
範例二:用 nl 列出 log2012.log 的內容,空本行也加上行號
命令:
nl -b a log2012.log
輸出:
[root@localhost test]# nl -b a log2012.log 1 2012-01 2 2012-02 3 4 5 ======[root@localhost test]#
範例3:讓行號前面自動補上0,統一輸出格式
命令:nl -b a -n rz log2014.log
輸出:
[root@localhost test]# nl -b a -n rz log2014.log 000001 2014-01 000002 2014-02 000003 2014-03
-
more
more命令,功能類似 cat ,cat命令是整個檔案的內容從上到下顯示在螢幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀,而最基本的指令就是按空白鍵(space)就往下一頁顯示,按 b 鍵就會往回(back)一頁顯示,而且還有搜尋字串的功能 。more命令從前向後讀取檔案,因此在啟動時就載入整個檔案。
1.命令格式:
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]
2.命令功能:
more命令和cat的功能一樣都是檢視檔案裡的內容,但有所不同的是more可以按頁來檢視檔案的內容,還支援直接跳轉行等功能。
3.命令引數:
+n 從笫n行開始顯示 -n 定義螢幕大小為n行 +/pattern 在每個檔案顯示前搜尋該字串(pattern),然後從該字串前兩行之後開始顯示 -c 從頂部清屏,然後顯示 -d 提示“Press space to continue,’q’ to quit(按空格鍵繼續,按q鍵退出)”,禁用響鈴功能 -l 忽略Ctrl+l(換頁)字元 -p 通過清除視窗而不是滾屏來對檔案進行換頁,與-c選項相似 -s 把連續的多個空行顯示為一行 -u 把檔案內容中的下畫線去掉
4.常用操作命令:
Enter 向下n行,需要定義。預設為1行 Ctrl+F 向下捲動一屏 空格鍵 向下捲動一屏 Ctrl+B 返回上一屏 = 輸出當前行的行號 :f 輸出檔名和當前行的行號 V 呼叫vi編輯器 !命令 呼叫Shell,並執行命令 q 退出more
5.命令範例:
範例1:顯示檔案中從第3行起的內容
命令:
more +3 log2012.log
輸出:
[root@localhost test]# cat log2012.log 2012-01 2012-02 2012-03 2012-04-day1 2012-04-day2 2012-04-day3 ====== [root@localhost test]# more +3 log2012.log 2012-03 2012-04-day1 2012-04-day2 2012-04-day3 ======
範例2:從檔案中查詢第一個出現"day3"字串的行,並從該處前兩行開始顯示輸出
命令:
more +/day3 log2012.log
輸出:
[root@localhost test]# more +/day3 log2012.log ...skipping 2012-04-day1 2012-04-day2 2012-04-day3 2012-05 2012-05-day1 ======
範例3:設定每屏顯示行數
命令:
more -5 log2012.log
輸出:
[root@localhost test]# more -5 log2012.log 2012-01 2012-02 2012-03 2012-04-day1 2012-04-day2
說明:
如下圖所示,最下面顯示了該屏展示的內容占檔案總行數的比例,按 Ctrl+F 或者 空格鍵 將會顯示下一屏5條內容,百分比也會跟著變化。
-
less
less 工具也是對檔案或其它輸出進行分頁顯示的工具,應該說是linux正統檢視檔案內容的工具,功能極其強大。less 的用法比起 more 更加的有彈性。在 more 的時候,我們並沒有辦法向前面翻, 只能往後面看,但若使用了 less 時,就可以使用 [pageup] [pagedown] 等按鍵的功能來往前往後翻看檔案,更容易用來檢視一個檔案的內容!除此之外,在 less 裡頭可以擁有更多的搜尋功能,不止可以向下搜,也可以向上搜。
1.命令格式:
less [引數] 檔案
2.命令功能:
less 與 more 類似,但使用 less 可以隨意瀏覽檔案,而 more 僅能向前移動,卻不能向後移動,而且 less 在檢視之前不會載入整個檔案。
3.命令引數:
-b <緩衝區大小> 設定緩衝區的大小 -e 當檔案顯示結束後,自動離開 -f 強迫開啟特殊檔案,例如外圍裝置代號、目錄和二進位制檔案 -g 只標誌最後搜尋的關鍵詞 -i 忽略搜尋時的大小寫 -m 顯示類似more命令的百分比 -N 顯示每行的行號 -o <檔名> 將less 輸出的內容在指定檔案中儲存起來 -Q 不使用警告音 -s 顯示連續空行為一行 -S 行過長時間將超出部分捨棄 -x <數位> 將“tab”鍵顯示為規定的數位空格 /字串:向下搜尋“字串”的功能 ?字串:向上搜尋“字串”的功能 n:重複前一個搜尋(與 / 或 ? 有關) N:反向重複前一個搜尋(與 / 或 ? 有關) b 向後翻一頁 d 向後翻半頁 h 顯示幫助介面 Q 退出less 命令 u 向前捲動半頁 y 向前捲動一行 空格鍵 捲動一行 確認鍵 捲動一頁 [pagedown]: 向下翻動一頁 [pageup]: 向上翻動一頁
註:less可同時檢視多個檔案使用n或者p進行切換
(二).部分輸出
-
head
1.命令格式:
head [引數]... [檔案]...
2.命令功能:
head 用來顯示檔案的開頭至標準輸出中,預設head命令列印其相應檔案的開頭10行。
3.命令引數:
-q 隱藏檔名 -v 顯示檔名 -c<位元組> 顯示位元組數 -n<行數> 顯示的行數
4.使用範例:
範例1:顯示檔案的前n行
命令:
head -n 5 log2014.log
輸出:
[root@localhost test]# cat log2014.log 2014-01 2014-02 2014-03 2014-04 2014-05 2014-06 2014-07 2014-08 2014-09 2014-10 2014-11 2014-12 ============================== [root@localhost test]# head -n 5 log2014.log 2014-01 2014-02 2014-03 2014-04 2014-05
範例2:顯示檔案前n個位元組
命令:
head -c 20 log2014.log
輸出:
[root@localhost test]# head -c 20 log2014.log 2014-01 2014-02 2014
範例3:檔案的除了最後n個位元組以外的內容
命令:
head -c -32 log2014.log
輸出:
[root@localhost test]# head -c -32 log2014.log 2014-01 2014-02 2014-03 2014-04 2014-05 2014-06 2014-07 2014-08 2014-09 2014-10 2014-11 2014-12
範例4:輸出檔案除了最後n行的全部內容
命令:
head -n -6 log2014.log
輸出:
[root@localhost test]# head -n -6 log2014.log 2014-01 2014-02 2014-03 2014-04 2014-05 2014-06 2014-07
-
tail
tail 命令從指定點開始將檔案寫到標準輸出.使用tail命令的-f選項可以方便的查閱正在改變的紀錄檔檔案,tail -f filename會把filename裡最尾部的內容顯示在螢幕上,並且不但重新整理,使你看到最新的檔案內容.
1.命令格式:
tail[必要引數][選擇引數][檔案]
2.命令功能:
用於顯示指定檔案末尾內容,不指定檔案時,作為輸入資訊進行處理。常用檢視紀錄檔檔案。
3.命令引數:
-f 迴圈讀取 -q 不顯示處理資訊 -v 顯示詳細的處理資訊 -c<數目> 顯示的位元組數 -n<行數> 顯示行數 --pid=PID 與-f合用,表示在進程ID,PID死掉之後結束. -q, --quiet, --silent 從不輸出給出檔名的首部 -s, --sleep-interval=S 與-f合用,表示在每次反復的間隔休眠S秒
4.使用範例:
範例1:顯示檔案末尾內容
命令:
tail -n 5 log2014.log
輸出:
[root@localhost test]# tail -n 5 log2014.log 2014-09 2014-10 2014-11 2014-12 ==============================
說明:
顯示檔案最後5行內容
範例2:迴圈檢視檔案內容
命令:
tail -f test.log
輸出:
[root@localhost ~]# ping 192.168.120.204 > test.log & [1] 11891[root@localhost ~]# tail -f test.log PING 192.168.120.204 (192.168.120.204) 56(84) bytes of data. 64 bytes from 192.168.120.204: icmp_seq=1 ttl=64 time=0.038 ms 64 bytes from 192.168.120.204: icmp_seq=2 ttl=64 time=0.036 ms 64 bytes from 192.168.120.204: icmp_seq=3 ttl=64 time=0.033 ms 64 bytes from 192.168.120.204: icmp_seq=4 ttl=64 time=0.027 ms 64 bytes from 192.168.120.204: icmp_seq=5 ttl=64 time=0.032 ms 64 bytes from 192.168.120.204: icmp_seq=6 ttl=64 time=0.026 ms 64 bytes from 192.168.120.204: icmp_seq=7 ttl=64 time=0.030 ms 64 bytes from 192.168.120.204: icmp_seq=8 ttl=64 time=0.029 ms 64 bytes from 192.168.120.204: icmp_seq=9 ttl=64 time=0.044 ms 64 bytes from 192.168.120.204: icmp_seq=10 ttl=64 time=0.033 ms 64 bytes from 192.168.120.204: icmp_seq=11 ttl=64 time=0.027 ms
說明:
ping 192.168.120.204 > test.log &
//在後台ping遠端主機。並輸出檔案到test.log;這種做法也使用於一個以上的檔案監視。用Ctrl+c來終止。
範例3:從第5行開始顯示檔案
命令:
tail -n +5 log2014.log
輸出:
[root@localhost test]# cat log2014.log 2014-01 2014-02 2014-03 2014-04 2014-05 2014-06 2014-07 2014-08 2014-09 2014-10 2014-11 2014-12 ============================== [root@localhost test]# tail -n +5 log2014.log 2014-05 2014-06 2014-07 2014-08 2014-09 2014-10 2014-11 2014-12 ==============================
-
hexdump
hexdump用來檢視二進位制檔案。
1.命令格式:
hexdump [options] file...
2.命令引數:
-b 單位元組八進位制顯示,十六進位制顯示偏移量,每行顯示16個字元,每字元用三位顯示,不足補零,列間以空格分隔 -c 單位元組字元顯示,十六進位制顯示偏移量,每行顯示16個字元,每字元三位顯示,不足補空格,列間以空格分隔 -C 標準十六進位制+ascii碼顯示,十六進位制顯示偏移量,每行16個字元,每字元兩位顯示,不足補0,結尾顯示當前16位元資料的ascii碼值,以|框住 -d 雙位元組十進位制顯示,十六進位制顯示偏移量,每行8組(16位元組)每組5位,不足補零,列間以空格分隔,以無符號10進位制數值顯示 -e format_string 以指定的格式顯示 -f format_file 根據format file中的格式進行輸出,忽略formatfile中空行及以#開始的行 -n length 只顯示length個位元組的資料 -o 雙位元組八進位制顯示。十六進位制顯示偏移量,每行8組資料,每資料占兩位元組,6列,不足補零,以空格分隔 -s offset 跳過從開始的offset個位元組,預設輸入十進位制,以0x或0X開始按16進位制處理,否則如以0開始按八進位制處理,如果以b/k/m結尾,則原數值乘以512/1024/1048576 -v 顯示所有資料,如果不包含這一選項,對於同上一行完全相同的資料,hexdump會以*代替顯示 -x 兩位十六進位制顯示.十六進位制顯示偏移量,每行8組資料,每資料占兩位元組,4列,不足補零,以空格分隔 -e 指定格式字串,格式字串包含在一對單引號中,格式字串形如: 'a/b "format1" "format2"' 每個格式字串由三部分組成,每個由空格分隔,第一個形如a/b,b表示對每b個輸入位元組應用format1格式,a表示對每a個輸入位元組應用format2格式,一般a>b,且b只能為1,2,4,另外a可以省略,省略則a=1。 format1和format2中可以使用類似printf的格式字串,如: %02d:兩位十進位制 %03x:三位十六進位制 %02o:兩位八進位制 %c:單個字元等
3.範例:
[root@bash ~]# hexdump -n10 -v -C -s 10 /bin/cat 0000000a 00 00 00 00 00 00 02 00 3e 00 |........>.| 00000014
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2017-02/140313p2.htm
相關文章