Linux深入探索09-過濾器

----- 最近更新【2022-01-15】-----

本文目錄結(jié)構(gòu)預(yù)覽:

  • 一、簡介
  • 二、實(shí)用的過濾器(列表)
  • 三、簡單的過濾器:cat、split、tac、rev、head、tail
    1、cat - 復(fù)制數(shù)據(jù)到標(biāo)準(zhǔn)輸出
    2、split - 劃分文件
    3、tac - 行反轉(zhuǎn)
    4、rev - 字符反轉(zhuǎn)
    5、head - 查看開頭
    6、tail - 查看末尾
  • 四、比較不同:cmp、comm、diff、sdiff
    1、cmp - 比較兩個(gè)文件(二進(jìn)制或者文本)
    2、comm - 比較兩個(gè)文件(有序文本)
    3、diff - 比較兩個(gè)文件(文本)
    4、sdiff - 比較兩個(gè)文件(并排比較)
  • 五、抽取:cut、colrm、paste
    1、cut - 抽取指定列
    2、colrm - 移除列
    3、paste - 組合數(shù)據(jù)列
  • 六、統(tǒng)計(jì)和格式化:nl、wc、expand、unexpand、old、fmt、pr
    1、nl - 插入行號
    2、wc - 單詞統(tǒng)計(jì)
    3、expand - 將制表符轉(zhuǎn)換成空格
    4、unexpand - 將空格轉(zhuǎn)換成制表符
    5、fold - 格式化行
    6、fmt - 格式化段落
    7、pr - 按頁格式化文本
  • 七、查找:grep、look
    1、grep - 選取包含特定模式的行
    2、look - 選取特定模式開頭的行(有序文本)
  • 八、排序、組合及變換:sort、uniq、join、tr、sed
    1、sort - 排序數(shù)據(jù)
    2、uniq - 查找重復(fù)行(有序文本)
    3、join - 合并兩個(gè)文件中的數(shù)據(jù)(有序文本)
    4、tr - 改變或者刪除指定的字符
    5、sed - 非交互文本編輯
  • 九、分頁程序:less、more
  • 十、參考

一、簡介

過濾器 就是任何能夠從標(biāo)準(zhǔn)輸入讀取文本數(shù)據(jù)并向標(biāo)準(zhǔn)輸出寫入文本數(shù)據(jù)(每次一行)的程序。之前介紹的管道|命令主要就是結(jié)合過濾器來完成工作,但是管道線中的第一個(gè)和最后一個(gè)程序不必是過濾器。

過濾器每次一行地從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),完成處理后,將結(jié)果每次一行地寫到標(biāo)準(zhǔn)輸出。

二、實(shí)用的過濾器(列表)

過濾器 作用 備注
awk 編程語言:操作文本
cat 組合文件:復(fù)制標(biāo)準(zhǔn)輸入到標(biāo)準(zhǔn)輸出
colrm 刪除指定的數(shù)據(jù)列
comm 比較兩個(gè)有序文件,顯示區(qū)別
cmp 比較兩個(gè)文件
cut 從數(shù)據(jù)中抽取指定列(字段)
diff 比較兩個(gè)文件,顯示不同
expand 將制表符轉(zhuǎn)變成空格
fold 將長行格式化成較短的行
fmt 格式化段落,從而使它們看上去更漂亮
grep 選擇包含指定模式的行
head 從數(shù)據(jù)的開關(guān)選擇行
join 基于公用字段,組合數(shù)據(jù)列
look 選擇以指定模式開頭的行
nl 創(chuàng)建行號
paste 組合數(shù)據(jù)列
perl 編程語言:操作文本、文件、進(jìn)程
pr 將文本格式化為頁或者列
rev 每行數(shù)據(jù)中的字符反序排列
sdiff 比較兩個(gè)文件,顯示區(qū)別
sed 非交互式文本編輯
sort 排序數(shù)據(jù);檢查數(shù)據(jù)是否有排序
split 將大文件分隔成較小的文件
strings 在二進(jìn)制文件中搜索字符串
tac 組合文件,同時(shí)將文本行的順序反轉(zhuǎn)
tail 從數(shù)據(jù)的末尾選擇行
tr 改變或者刪除指定的字符
tsort 根據(jù)偏序創(chuàng)建全序
unexpand 將空格轉(zhuǎn)變成制表符
uniq 選擇重復(fù)/唯一行
wc 統(tǒng)計(jì)行數(shù)、單詞數(shù)和字符數(shù)

注意:

  • 我們常用less命令來顯示輸出,但less并不是每次一行地將數(shù)據(jù)寫到標(biāo)準(zhǔn)輸出。less允許每次一屏地查看所有的數(shù)據(jù)、向后滾動和向前滾動、搜索具體模式等,所以less不是過濾器。
  • look 不能從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),它必須從一個(gè)或多個(gè)文件中獲取輸入。所以,嚴(yán)格地講,look 也不是一個(gè)過濾器。
  • more 只能向前分頁瀏覽文件內(nèi)容,more 也不是一個(gè)過濾器。

三、簡單的過濾器:cat、split、tac、rev、head、tail

1、cat - 復(fù)制數(shù)據(jù)到標(biāo)準(zhǔn)輸出

cat 程序?qū)?shù)據(jù)未加改變地復(fù)制到標(biāo)準(zhǔn)輸出。數(shù)據(jù)可以來源于標(biāo)準(zhǔn)輸入或者一個(gè)或多個(gè)文件。(concatenate files and print on the standard output.)

語法:cat [OPTION]... [FILE]...

常用例子:

語法 作用
cat > file 從鍵盤讀取數(shù)據(jù),創(chuàng)建新文件或者替換已有文件
cat >> file 從鍵盤讀取數(shù)據(jù),將數(shù)據(jù)追加到已有文件中
cat < file 或者 cat file 顯示一個(gè)已有文件
cat < file1 > file2 復(fù)制文件
cat file1 file2 file3 組合多個(gè)文件,一次一屏地顯示結(jié)果
cat file1 file2 file3 > file4 組合多個(gè)文件,將輸出保存到一個(gè)不同文件中
cat file1 file2 file3 | program 組合多個(gè)文件,將輸出管道傳送給另一個(gè)程序

cat 命令常用選項(xiàng):

  • -n,(number) 在每行前面加一個(gè)行號
  • -b,(blank) 與 -n 選項(xiàng)一起使用,告訴cat不要對空白行編號
  • -s,(squeeze) 將多個(gè)連續(xù)空白行替換為一個(gè)空白行

2、split - 劃分文件

split 將一個(gè)大文件劃分成幾個(gè)較小的文件。(split a file into pieces)

語法:split [OPTION]... [FILE [PREFIX]]

常用組合:split [-d] [-a num] [-l lines] [file [prefix]]

  • -a num,num是創(chuàng)建文件名時(shí)用作文件名后綴的字符或數(shù)字的數(shù)量,默認(rèn)是aa、ab、ac...
  • -d,(digits)使用數(shù)字作為文件名后綴,默認(rèn)從00開始。
  • -l lines,lines是每個(gè)新文件所包含的最大行數(shù),默認(rèn)是1000。
  • file,輸入文件的名稱。
  • prefix,輸出文件名稱的前綴,默認(rèn)是x。

例:

split -d -l 5000 filename newfile_

3、tac - 行反轉(zhuǎn)

tac 在將文本寫入到標(biāo)準(zhǔn)輸出之前將文本行的順序反轉(zhuǎn)(名稱tac就是cat的反向拼寫)。(concatenate and print files in reverse)

語法:tac [OPTION]... [FILE]...

例:

tac file1 fiel2 file3 | less

4、rev - 字符反轉(zhuǎn)

rev 將文本各行中字符的順序反轉(zhuǎn)。(reverse lines characterwise)

語法:rev [option] [file...]

例:

rev filename | tac

5、head - 查看開頭

head 從數(shù)據(jù)的開頭選擇數(shù)據(jù)行。(output the first part of files)

語法:head [OPTION]... [FILE]...

常用選項(xiàng):

  • -n,(lines)希望選取的數(shù)據(jù)行的數(shù)量,默認(rèn)是開頭10行。

例:

[nosee@instance-4 ~]$ cal -y | head
                            2022
      January               February               March          
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                   1         1  2  3  4  5         1  2  3  4  5  
 2  3  4  5  6  7  8   6  7  8  9 10 11 12   6  7  8  9 10 11 12  
 9 10 11 12 13 14 15  13 14 15 16 17 18 19  13 14 15 16 17 18 19  
16 17 18 19 20 21 22  20 21 22 23 24 25 26  20 21 22 23 24 25 26  
23 24 25 26 27 28 29  27 28                 27 28 29 30 31        
30 31 

6、tail - 查看末尾

tail 從數(shù)據(jù)的末尾選擇數(shù)據(jù)行。(output the last part of files)

語法:tail [OPTION]... [FILE]...

常用選項(xiàng):

  • -n num,(lines)希望選取的數(shù)據(jù)行的數(shù)量,默認(rèn)是末尾10行。
  • -n +num,從num行開始,顯示至文件末尾
  • -f,(follow 跟隨)監(jiān)聽一個(gè)文件末尾的變化。(如,實(shí)時(shí)監(jiān)控日志文件。ail 也可以同時(shí)監(jiān)控多個(gè)文件)

例:

cat file1 file2 file3 | sort | tail -n 20

例:實(shí)時(shí)監(jiān)控日志文件

# 窗口1
tail -f day1
# 窗口2 (模擬日記文件添加日志)
cat >> day1

四、比較不同:cmp、comm、diff、sdiff

1、cmp - 比較兩個(gè)文件(二進(jìn)制或者文本)

cmp 的使用情況只有一種情形:查看兩個(gè)文件是否相同。( compare two files byte by byte)

語法:cmp [OPTION]... FILE1 [FILE2 [SKIP1 [SKIP2]]]

cmp 程序逐字節(jié)地比較兩個(gè)文件,查看兩個(gè)文件是否相同。如果兩個(gè)文件中對應(yīng)的字節(jié)完全相同,那么這兩個(gè)文件就是相同的,在這種情況下,cmp 程序不做任何處理(沒有消息就是好消息)。如果兩個(gè)文件不相同,那么 cmp 程序就顯示一個(gè)合適的消息。

例:

[nosee@instance-4 ~]$ cmp test1 test2
test1 test2 differ: byte 1, line 1

2、comm - 比較兩個(gè)文件(有序文本)

comm 程序一行一行地比較兩個(gè)有序的文本文件。當(dāng)有兩個(gè)相似的文本,并且希望查看它們之間的區(qū)別時(shí),可以使用 comm 程序。(compare two sorted files line by line)

語法:comm [OPTION]... FILE1 FILE2

comm 程序以3列顯示輸出:第1列包含只在第一個(gè)文件中有的行;第2列包含只在第二個(gè)文件中有的行;第三列包含兩個(gè)文件中都有的行。

例:

[nosee@instance-4 ~]$ cat > file1
1.aaaaa
2.ddddd
3.ggggg
4.nnnnn
^C
[nosee@instance-4 ~]$ cat > file2
1.aaaaa
2.bbbbb
3.ggggg
^C
[nosee@instance-4 ~]$ comm file1 file2
        1.aaaaa
    2.bbbbb
2.ddddd
        3.ggggg
4.nnnnn

常用選項(xiàng):

  • -1,不輸出第1列內(nèi)容
  • -2,不輸出第2列內(nèi)容
  • -3,不輸出第3列內(nèi)容

如,不想輸出相同的內(nèi)容:

[nosee@instance-4 ~]$ comm -3 file1 file2
    2.bbbbb
2.ddddd
4.nnnnn

3、diff - 比較兩個(gè)文件(文本)

當(dāng)需要(1)比較兩個(gè)無序文件,(2)比較大的文件時(shí),可以使用 diff (compare files line by line)。diff 可以用來查找任何類型的文件帶來的區(qū)別,例如編程語言等。可以聯(lián)想到 Git(版本控制系統(tǒng))。

1)語法:diff [OPTION]... FILES

如上面的例子使用 diff 比較:

[nosee@instance-4 ~]$ diff file1 file2
2c2
< 2.ddddd
---
> 2.bbbbb
4d3
< 4.nnnnn

diff 的目的就是顯示將第一個(gè)文件修改為第二個(gè)文件所需遵循的指示。這些指示的語法相當(dāng)簡潔,但并不簡單。

指示的說明:c(change,改變)、d(delete,刪除)、a(append,追加)。每個(gè)c、d、a字符的左右兩邊都有一串行號,左邊的數(shù)字指第一個(gè)文件中的行,右邊的數(shù)字指第二個(gè)文件中的行。< 標(biāo)記第一個(gè)文件中的行,< 標(biāo)記第二個(gè)文件中的行。(---)是為了可讀性將兩個(gè)不同的行隔開。

如,上面例子表示,將第一個(gè)文件轉(zhuǎn)換成第二個(gè)文件需要:2c2表示將第一個(gè)文件的第二行修改成第二個(gè)文件的第二行,4d3表示將第一個(gè)文件的第4行刪除。

2)常用選項(xiàng)

diff 程序相當(dāng)復(fù)雜,它有大量的選項(xiàng)和許多種生成輸出的方式。一些常用的選項(xiàng)如下:

  • -i,(case insensitive)不區(qū)分大小寫。
  • -w,(whitespace)忽略所有空白符。
  • -b,忽略空白符(只忽略數(shù)量上的區(qū)別)。
  • -B,(blank lines)忽略所有空白行。
  • -q,(quiet)當(dāng)兩個(gè)文件不同時(shí),省略所有的細(xì)節(jié),只給出文件不同的提示即可。
  • -s,(same)當(dāng)兩個(gè)文件相同時(shí),也給出提示信息。
  • -c,(context,上下文關(guān)系)以不太簡潔,但更容易理解的格式顯示兩個(gè)文件之間的區(qū)別。
  • -u,(unified output,統(tǒng)一輸出)生成類似于 -c 選項(xiàng)生成的輸出,但是沒有重復(fù)行。
  • -y,(side-by-side)并排顯示

3)-c 選項(xiàng)
使用 -c 選項(xiàng)后,diff 將不再顯示指示和行號,而是顯示存在不同的實(shí)際行,同時(shí)還顯示不同行的上面和下面各兩行內(nèi)容。

[nosee@instance-4 ~]$ diff -c file1 file2
*** file1   2022-01-12 20:52:27.120528503 +0000
--- file2   2022-01-12 20:52:43.161814285 +0000
***************
*** 1,4 ****
  1.aaaaa
! 2.ddddd
  3.ggggg
- 4.nnnnn
--- 1,3 ----
  1.aaaaa
! 2.bbbbb
  3.ggggg

最頂端的兩行展示兩個(gè)文件的信息。同時(shí)說明第一個(gè)文件由*(星號)字符標(biāo)志,第二個(gè)文件由-字符標(biāo)志。這兩行之后,則示范了為使兩個(gè)文件相同需要進(jìn)行些什么改變。
相比默認(rèn)的輸出方式,-c 選項(xiàng)所生成的輸出要比默認(rèn)格式生成的輸出冗長很多。

4)-u 選項(xiàng)
生成類似于 -c 選項(xiàng)生成的輸出,但是沒有重復(fù)行。

[nosee@instance-4 ~]$ diff -u file1 file2
--- file1   2022-01-12 20:52:27.120528503 +0000
+++ file2   2022-01-12 20:52:43.161814285 +0000
@@ -1,4 +1,3 @@
 1.aaaaa
-2.ddddd
+2.bbbbb
 3.ggggg
-4.nnnnn

5)-y 選項(xiàng)
生成并排的格式,在這種各式中,第一個(gè)文件中的每一行都與第二個(gè)文件中的對應(yīng)行并排著顯示。

[nosee@instance-4 ~]$ diff -y file1 file2
1.aaaaa                             1.aaaaa
2.ddddd                           | 2.bbbbb
3.ggggg                             3.ggggg
4.nnnnn                           <

這種類型輸出的優(yōu)點(diǎn)是非常容易看出區(qū)別,缺點(diǎn)則是對于長文件來說可能生成太多輸出。

該輸出模式可以使用sdiff命令來代替diff -y

4、sdiff - 比較兩個(gè)文件(并排比較)

當(dāng)需要進(jìn)行并排比較時(shí),許多人愿意使用sdiff,因?yàn)樗性S多專用的選項(xiàng),可以提供大量的控制。(side-by-side merge of file differences)

語法:sdiff [OPTION]... FILE1 FILE2

[nosee@instance-4 ~]$ sdiff file1 file2
1.aaaaa                             1.aaaaa
2.ddddd                           | 2.bbbbb
3.ggggg                             3.ggggg
4.nnnnn                           <

常用選項(xiàng):

  • -l,當(dāng)兩個(gè)文件擁有共同行時(shí),該選項(xiàng)只顯示左邊的列。
  • -s,不顯示在兩個(gè)文件中相同的任何行。
  • -w num,改變列的寬度。
  • -i-W-b-B 選項(xiàng)則與 diff 的相同意思。(注意 sdiff 使用 -W,而 diff 使用 -w
[nosee@instance-4 ~]$ sdiff -s -w 30 file1 file2
2.ddddd       | 2.bbbbb
4.nnnnn       <

五、抽取:cut、colrm、paste

1、cut - 抽取指定列

cut 程序是一個(gè)從數(shù)據(jù)中抽取指定列(或指定字段)并將其它內(nèi)容拋棄的過濾器(remove sections from each line of files)。這與 colrm 相反,colrm 從數(shù)據(jù)中刪除指定列并保存其它內(nèi)容。

語法:cut OPTION... [FILE]...

1)當(dāng)抽取數(shù)據(jù)列時(shí)
語法:cut -c list [FILE]... 或 -c 后面的空格可以省略。

使用列表告訴 cut 希望抽取哪些列時(shí),可以指定一個(gè)或多個(gè)列號(用逗號隔開),或者用-來指定列的范圍。

例:

[nosee@instance-4 ~]$ cat day
                            2021
      January               February               March          
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  
                1  2      1  2  3  4  5  6      1  2  3  4  5  6  
 3  4  5  6  7  8  9   7  8  9 10 11 12 13   7  8  9 10 11 12 13  
10 11 12 13 14 15 16  14 15 16 17 18 19 20  14 15 16 17 18 19 20  
17 18 19 20 21 22 23  21 22 23 24 25 26 27  21 22 23 24 25 26 27  
24 25 26 27 28 29 30  28                    28 29 30 31           
[nosee@instance-4 ~]$ cut -c 23-42 day
      2021
      February      
Su Mo Tu We Th Fr Sa
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28  

管道應(yīng)用例子:

[nosee@instance-4 ~]$ who
root     pts/0        2022-01-12 23:20 (120.240.48.86)
nosee    pts/1        2022-01-12 23:20 (120.240.48.86)
nosee    pts/3        2022-01-12 14:32 (34.96.173.249)
[nosee@instance-4 ~]$ who | cut -c1-8 | sort
nosee   
nosee   
root 
[nosee@instance-4 ~]$ who | cut -c1-8 | sort | uniq -c
      2 nosee   
      1 root  

2)當(dāng)抽取數(shù)據(jù)字段時(shí)
當(dāng)文本信息不是按列對齊的時(shí)候,但如果它是以一個(gè)機(jī)器可讀格式存在,也是可以使用 cut 來抽取的。

當(dāng)使用程序處理數(shù)據(jù)時(shí),我們經(jīng)常會遇到機(jī)器可能的文件,如unix的口令文件/etc/passws,如數(shù)據(jù)庫CSV文件。對于這種數(shù)據(jù)來說,每行都稱為一個(gè)記錄(record),每行的各個(gè)部分稱為字段(field),而充當(dāng)字段分隔符的字符稱為定界符(delimiter)。

語法:cut -f list [-d delimiter] [-s] [FILE]...,或 -f 與 -d 后面的空格可省略。

例:

[nosee@instance-4 ~]$ cut -f 1,3-5 -d ':' /etc/passwd
root:0:0:root
daemon:1:1:daemon
bin:2:2:bin
sys:3:3:sys
sync:4:65534:sync
games:5:60:games
man:6:12:man
lp:7:7:lp
mail:8:8:mail

2、colrm - 移除列

colrm("column remove",移除列)程序從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),刪除指定的數(shù)據(jù)列,然后將剩余數(shù)據(jù)寫入到標(biāo)準(zhǔn)輸出。(remove columns from a file)

語法:colrm [start [stop]]

其中start和stop指定要移除區(qū)域的開頭和末尾,列的編號從1開始。

例:

colrm 14 15 < filename | less
colrm 14 15 < file1 > file2

3、paste - 組合數(shù)據(jù)列

paste 程序組合數(shù)據(jù)列。 (merge lines of files)
paste 程序可以將幾個(gè)文件(其中每個(gè)文件都包含一列數(shù)據(jù))組成一個(gè)大表;也可以將連續(xù)的數(shù)據(jù)行組合起來,構(gòu)建多個(gè)列。

語法:paste [OPTION]... [FILE]...

例:

paste fime1 file2 file3 > info.txt

六、統(tǒng)計(jì)和格式化:nl、wc、expand、unexpand、old、fmt、pr

1、nl - 插入行號

在文本中插入行號。(number lines of files)

語法:nl [OPTION]... [FILE]...

常用選項(xiàng):

  • -v num,起始號
  • -i num,增量
  • -b a,(body numbering)正文編號。后面跟字母a(all lines),對所有行編號。(默認(rèn)情況下 nl 不對空行編號)
  • -n,(number format)數(shù)字格式。后面可跟:ln(左對齊,沒有前導(dǎo)0)、rn(右對齊,沒有前導(dǎo)0)、rz(右對齊,有前導(dǎo)0)

例:

[nosee@instance-4 ~]$ nl -b a -n rz aaa.txt | head
000001  NL(1)                              User Commands                               NL(1)
000002  
000003  NAME
000004         nl - number lines of files
000005  
000006  SYNOPSIS
000007         nl [OPTION]... [FILE]...
000008  
000009  DESCRIPTION
000010         Write each FILE to standard output, with line numbers added.

2、wc - 單詞統(tǒng)計(jì)

wc 程序統(tǒng)計(jì)行、單詞和字符的數(shù)量。(print newline, word, and byte counts for each file)

語法:wc [OPTION]... [FILE]...wc [OPTION]... --files0-from=F

默認(rèn)情況下,wc 的輸出包含3個(gè)數(shù)字:數(shù)據(jù)中的行數(shù)、單詞數(shù)和字符數(shù)。

  • “行”就是以新行字符結(jié)尾的一串字符
  • “單詞”就是一串連續(xù)的字符,用空格、制表符或新行字符分隔
  • “字符”就是字母、數(shù)字、標(biāo)點(diǎn)符號、空格、制表符或者新行字符

常用選項(xiàng):

  • -l,統(tǒng)計(jì)行
  • -w,統(tǒng)計(jì)單詞
  • -c,統(tǒng)計(jì)字符
  • -L,顯示最長行的長度

例:

[nosee@instance-4 ~]$ wc aaa.txt day.txt 
  94  315 2901 aaa.txt
   8  114  502 day.txt
 102  429 3403 total

例:統(tǒng)計(jì)目錄下的文件數(shù)

[nosee@instance-4 ~]$ ls -al /etc | wc -l
150

3、expand - 將制表符轉(zhuǎn)換成空格

expand 程序?qū)⑤斎胛募械乃兄票矸淖兂煽崭瘢⑼S持與原始文本相同的對齊方式。(convert tabs to spaces.)

語法:expand [OPTION]... [FILE]...

默認(rèn)情況下,expand 使用 Unix 慣例,即將制表位設(shè)置為每8個(gè)位置一個(gè)。因此,輸入中的每個(gè)制表符都將被輸出中的1至8個(gè)空格替換。

unexpand

  • -t num,設(shè)置制表位。默認(rèn)num為8,即每隔8個(gè)字符為一個(gè)制表位。
  • -i,(initial)只轉(zhuǎn)換每行開頭的制表符

例:

expand -t 4 filename

4、unexpand - 將空格轉(zhuǎn)換成制表符

將空格轉(zhuǎn)換成制表符,同時(shí)保持原始文件中的對齊方式。(convert spaces to tabs.)

語法:unexpand [OPTION]... [FILE]...

與 expand 一個(gè)重要的區(qū)別就是,默認(rèn)情況下 unexpand 程序只替換行開頭的空格。

常用選項(xiàng):

  • -a,(all)替換所有空格

5、fold - 格式化行

fold 將長行分隔成短行。(wrap each input line to fit in specified width)

語法:fold [OPTION]... [FILE]...

常用選項(xiàng):

  • -w width,設(shè)置行的最大寬度,默認(rèn)是80。
  • -s,不分隔單詞

例:

man fold | fold -s -w 40 | less

6、fmt - 格式化段落

fmt 程序?qū)⒍温渲械母餍羞B接起來,從而使段落盡可能短小和緊湊,而且還不改變內(nèi)容和空白符。換句話說,就是 fmt 使用文本看上去更漂亮。(simple optimal text formatter)

語法:fmt [-WIDTH] [OPTION]... [FILE]...

常用選項(xiàng):

  • -w num,設(shè)置行的寬度。(default of 75 columns)
  • -u,(uniform spacing)減少空格,使單詞之間最多只有一個(gè)空格,句子末尾最多只有兩個(gè)空格。
  • -s,(split only)僅拆分。告訴 fmt 拆分長行,但是不連接短行。

當(dāng) fmt 讀取文本時(shí),它假定段落由空行分隔。因此,一個(gè)段落就是一個(gè)或多個(gè)連續(xù)的文本行,不包括空行。
fmt 程序根據(jù)下述規(guī)則每次讀取并格式化一個(gè)段落:

  • 行寬:使每行盡可能的長,但是不能超過指定的長度。默認(rèn)情況下,-w 的值為 75 個(gè)字符。
  • 句子:無論何時(shí),盡可能地在句子末尾分隔行。
  • 空白符:保持單詞與空行之間的所有縮進(jìn)、空格。可使用 -u 選項(xiàng)修改。
  • 制表符:在讀取文件時(shí)將所有的制表符轉(zhuǎn)換成空格,并且在最后的輸出中的合適位置上插入新的制表符。

例:

[nosee@instance-4 ~]$ man fmt | fmt -u -w 50 | head -n 16
FMT(1) User Commands FMT(1)

NAME
       fmt - simple optimal text formatter

SYNOPSIS
       fmt [-WIDTH] [OPTION]... [FILE]...

DESCRIPTION
       Reformat each paragraph in the FILE(s),
       writing to standard output.  The option
       -WIDTH is an abbreviated form of
       --width=DIGITS.

       With no FILE, or when FILE is -, read
       standard input.

7、pr - 按頁格式化文本

pr 程序提供兩種基本服務(wù):首先, pr 將文本格式化成頁;其次,pr 確保每頁都有自己的標(biāo)題、邊緣和頁號。(convert text files for printing)

但是,pr 程序不僅僅是將文本簡單地分成頁并生成標(biāo)題、邊緣和頁號。pr 還可以將一個(gè)單獨(dú)文件中的文本按列排序;還可以將多個(gè)文件中的文本合并在一起,每個(gè)文件進(jìn)入自己的列。

語法:pr [OPTION]... [FILE]...

常用選項(xiàng):

  • -h text,text 是標(biāo)題中間的文字
  • -l n,n 是每頁的行數(shù)
  • -o margin,(offset)偏移,margin 是左邊緣的大小
  • -W width,width 是輸出的寬度,默認(rèn)是72字符
  • +beg [:end],beg 表示開始打印的頁號,end 表示最后需要打印的頁號。如+2:5表示只格式化并打印第2頁至第5頁。
  • -d,使用雙倍行距文本
  • -t,移除標(biāo)題
  • -columns,分列打印,columns 為一個(gè)數(shù)字,如-2表示把文本分成兩列(即把原本兩頁的內(nèi)容合并成一頁中的兩列內(nèi)容,以此類推)
  • -m,(merge)合并。將多個(gè)文件分別格式化成單獨(dú)的列。

例:

[nosee@instance-4 ~]$ man pr | fmt -uw 100 |nl -ba | pr +2 -h '---pr手冊---' | head -n 20


2022-01-13 20:46                   ---pr手冊---                   Page 2


    57         -m, --merge
    58                print all files in parallel, one in each column, truncate lines, but join lines
    59                of full length with -J
    60  
    61         -n[SEP[DIGITS]], --number-lines[=SEP[DIGITS]]
    62                number lines, use DIGITS (5) digits, then SEP (TAB), default counting starts with
    63                1st line of input file
    64  
    65         -N, --first-line-number=NUMBER
    66                start counting with NUMBER at 1st line of first page printed (see +FIRST_PAGE)
    67  
    68         -o, --indent=MARGIN
    69                offset each line with MARGIN (zero) spaces, do not affect -w or -W, MARGIN will
    70                be added to PAGE_WIDTH
    71  

七、查找:grep、look

1、grep - 選取包含特定模式的行

grep 程序從標(biāo)準(zhǔn)輸入或者文件中讀取數(shù)據(jù),抽取所有包含特定模式的行,并寫到標(biāo)準(zhǔn)輸出。(print lines that match patterns)

grep 中的 g 代表“global 全局”,re 代表“regular expression 正則表達(dá)式”,p 代表“print 打印”。

grep 的變體有:egrep, fgrep, rgrep。(這些變體已被棄用,提供這些變體是為了向后兼容)
In addition, the variant programs egrep, fgrep and rgrep are the same as grep -E, grep -F, and grep -r, respectively. These variants are deprecated, but are provided for backward compatibility.

語法:
grep [OPTION...] PATTERNS [FILE...]
grep [OPTION...] -e PATTERNS ... [FILE...]
grep [OPTION...] -f PATTERN_FILE ... [FILE...]

例:

[nosee@instance-4 ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash

常用選項(xiàng):

  • -c,(count)統(tǒng)計(jì)所抽取行的數(shù)量
  • -i,(ignore)忽略大小寫
  • -n,在選取的數(shù)據(jù)行前面加上它在原本數(shù)據(jù)中對應(yīng)的位置(行號)
  • -l,(list filename)不顯示包含該模式的各行,而是將包含這種模式的文件名稱寫出來
  • -L,與 -l 選項(xiàng)正好相反,將不包含這種模式的文件名稱寫出來
  • -w,指定只希望搜索完整的單詞
  • -v,(reverse 相反)選取不包含指定模式的行
  • -x,查找那些完全由搜索模式構(gòu)成的行
  • -r,(recursive 遞歸)搜索整個(gè)目錄樹。(相當(dāng)于rgrep)
  • -F,搜索固定的字符串,而不是正則表達(dá)式。(相當(dāng)于fgrep)
  • -E,允許使用擴(kuò)展正則表達(dá)式。(相當(dāng)于egrep)
  • --color 搜索到的內(nèi)容加上顏色顯示

例:統(tǒng)計(jì)在 /etc 目錄下,名字以 rc 開頭的文件

[nosee@instance-4 ~]$ ls /etc/ | grep '^rc'
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d
rcS.d
[nosee@instance-4 ~]$ ls /etc/ | grep -c '^rc'
8

例:遞歸查找目錄www下文件中包含'phpinfo'的文件,并顯示所在位置

[nosee@instance-4 ~]$ grep -rn phpinfo www
www/hi.php:5://phpinfo();
www/phpinfo.php:4:phpinfo();

2、look - 選取特定模式開頭的行(有序文本)

look 程序搜索以字母順序排列的數(shù)據(jù),并查找所有以特定模式開頭的行。(display lines beginning with a given string)

語法:look [-bdf] [-t termchar] string [file ...]

常用選項(xiàng):

  • -d,(dictionary 字典)只考慮字母和數(shù)字,忽略標(biāo)點(diǎn)符號和其它特殊字符
  • -f,忽略大小寫

例:

[nosee@instance-4 ~]$ look -f x look-test.txt
X11
xattr.conf
xdg

look 不能從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù),它必須從一個(gè)或多個(gè)文件中獲取輸入。所以,嚴(yán)格地講,look 并不是一個(gè)過濾器。
對于標(biāo)準(zhǔn)輸入來說,程序每次只能讀取一行數(shù)據(jù)。但是,look 程序是使用一種“二分查找”的搜索方法,要求同時(shí)訪問所有的數(shù)據(jù)。基于這個(gè)原因,look 程序可以在管道線的開頭使用,但不能在管道線中間或末尾使用。

look 有兩大優(yōu)點(diǎn):易于使用并且速度非常快。

通過使用 look 程序搜索字典文件,還可以用于單詞查找。
假設(shè)你想輸入一個(gè)單詞,但是不確定它的拼寫,則可以使用 look 來做檢查。如:simultaneous

[10:46 @nosee ~]$ look simult
simultaneous
simultaneously

使用man look說明可以查看字典文件存放在什么位置,感興趣的話也可以使用wc -l命令去查看一下該字典文件上共收錄了多少個(gè)單詞:

[10:50 @nosee /usr/share/dict]$ cat american-english | wc -l
102401

八、排序、組合及變換:sort、uniq、join、tr、sed

1、sort - 排序數(shù)據(jù)

sort 程序用于排序數(shù)據(jù)以及查看數(shù)據(jù)是否已經(jīng)有序。(sort lines of text files)

語法:sort [OPTION]... [FILE]...sort [OPTION]... --files0-from=F

sort 程序擁有極大的靈活性,它即可以比較整行,也可以從每行中選取部分(字段)進(jìn)行比較。使用 sort 的最簡單的方法就是排序一個(gè)單獨(dú)的文件、比較整行并在屏幕上顯示結(jié)果。(默認(rèn)情況下是 ASCII 表的順序進(jìn)行排序)

常用選項(xiàng):

  • -o filename,(output 輸出)將排序好的數(shù)據(jù)存放到 filename 文件中。
  • -d,(dictionary 字典)只查看字母、數(shù)字和空白符(空格和制表符),忽略其它字符對排序的影響(如標(biāo)點(diǎn)符號)
  • -f,(fold,等同)同等對待大寫字母和小寫字母,即忽略大小寫。
  • -n,(numeric,數(shù)字)識別行開頭或者字段開頭的數(shù)字,并按照數(shù)字進(jìn)行排序。
  • -r,(reverse,反向)按反向順序?qū)?shù)據(jù)排序。
  • -u,(unique,唯一)相同的行只留下一行
  • -c,(check,檢查)檢查數(shù)據(jù)是否已經(jīng)有序
  • -cu,表示檢查數(shù)據(jù)是否已經(jīng)有序,并且所有行都是唯一

例:

[nosee@instance-4 ~]$ sort -f sorttest.txt
batch-size=NMERGE
Characters in a field are counted from the beginning of the preceding
compress-program=PROG
debug
files0-from=F
in the field; both are origin 1, and the stop position defaults to the
line's end.  If neither -t nor -b is in effect,
r, --reverse
random-source=FILE
s, --stable

2、uniq - 查找重復(fù)行(有序文本)

uniq 程序用于查找有序數(shù)據(jù)中的重復(fù)行。(report or omit repeated lines)

語法:uniq [OPTION]... [INPUT [OUTPUT]]

uniq 程序可以執(zhí)行4項(xiàng)不同的任務(wù):消除重復(fù)行、選取重復(fù)行、選取唯一行、統(tǒng)計(jì)重復(fù)行的數(shù)量

常用選項(xiàng):

  • -d,只查看重復(fù)行
  • -u,只查看非重復(fù)行
  • -c,統(tǒng)計(jì)每行重復(fù)的次數(shù)

例:刪除重復(fù)行

[nosee@instance-4 ~]$ cat uuu.txt 
aaaaaa
dddddd
dddddd
ccc
fffff
fffff
gggg
hhhhh
[nosee@instance-4 ~]$ uniq uuu.txt 
aaaaaa
dddddd
ccc
fffff
gggg
hhhhh
[nosee@instance-4 ~]$ uniq -c uuu.txt 
      1 aaaaaa
      2 dddddd
      1 ccc
      2 fffff
      1 gggg
      1 hhhhh

3、join - 合并兩個(gè)文件中的數(shù)據(jù)(有序文本)

join 程序基于特定字段的值將兩個(gè)有序文件組合在一起。(join lines of two files on a common field)

語法:join [OPTION]... FILE1 FILE2

常用選項(xiàng):

  • -a1,顯示第一個(gè)文件的所有行
  • -a2,顯示第二個(gè)文件的所有行
  • -v1,查看第一個(gè)文件中沒有匹配的行
  • -v2,查看第二個(gè)文件中沒有匹配的行
  • -i,(ignore)忽略大小寫
  • -1 num,設(shè)置第一個(gè)文件的連接字段,默認(rèn)為1
  • -2 num,設(shè)置第二個(gè)文件的連接字段,默認(rèn)為1

注意:

  • 選項(xiàng)-a與選項(xiàng)-v不可以同時(shí)使用(如-a1 -v2);但是-a1 -a2這樣是可以的,稱之為外聯(lián)接,反之在默認(rèn)情況 join 程序?yàn)閮?nèi)聯(lián)接。
  • 默認(rèn)情況下,jion 假定各個(gè)字段之間用空白符分隔(空格或制表符)
  • 設(shè)置連接字段,如-1 3 -2 4表示用第一個(gè)文件的第三個(gè)字段和第二個(gè)文件的第四個(gè)字段進(jìn)行連接。

例:

[nosee@instance-4 ~]$ cat aaa.txt 
111 gdfgseer
222 srgerge
333 serhger
444 jjjjj
[nosee@instance-4 ~]$ cat bbb.txt 
111 地胉
222 我人
333 哈哈
555 嘿嘿
[nosee@instance-4 ~]$ join  aaa.txt bbb.txt 
111 gdfgseer 地胉
222 srgerge 我人
333 serhger 哈哈
[nosee@instance-4 ~]$ join  -a1 aaa.txt bbb.txt 
111 gdfgseer 地胉
222 srgerge 我人
333 serhger 哈哈
444 jjjjj
[nosee@instance-4 ~]$ join  -v2 aaa.txt bbb.txt 
555 嘿嘿

4、tr - 改變或者刪除指定的字符

tr(translate 轉(zhuǎn)換)程序可以對字符執(zhí)行3種不同的運(yùn)算。(translate or delete characters)
1)可以將字符改變成其它字符。
2)可以指定如果要轉(zhuǎn)換的字符連續(xù)出現(xiàn)不止一次,則用一個(gè)單獨(dú)的字符替換。
3)可以刪除指定的字符

語法:tr [OPTION]... SET1 [SET2]

常用選項(xiàng):
-s,將SET1中的多個(gè)連續(xù)字符替換為一個(gè)單獨(dú)的字符
-d,刪除指定的字符,使用該選項(xiàng)時(shí),參數(shù)SET2則不需要
-c,匹配所有不在SET1中的字符

常用參數(shù)

  • SET1,需要查找的字符組
  • SET2,用作替換的字符組

SET1SET2常用組合:

  • [:lower:],小寫字母,相當(dāng)于a-z
  • [:upper:],大寫字母,相當(dāng)于A-Z
  • [:digit:],數(shù)字,相當(dāng)于0-9

例:

[nosee@instance-4 ~]$ cat ddd.txt 
root:x:0,0
sshd:x:105,65534
sync:x:4,65534
sys:x:3,3
uucp:x:10,10
www-data:x:33,33
[nosee@instance-4 ~]$ tr s S < ddd.txt 
root:x:0,0
SShd:x:105,65534
Sync:x:4,65534
SyS:x:3,3
uucp:x:10,10
www-data:x:33,33
[nosee@instance-4 ~]$ cat ddd.txt | tr ':,' \~
root~x~0~0
sshd~x~105~65534
sync~x~4~65534
sys~x~3~3
uucp~x~10~10
www-data~x~33~33
[nosee@instance-4 ~]$ cat ddd.txt | tr -s '0-9' '?'
root:x:?,?
sshd:x:?,?
sync:x:?,?
sys:x:?,?
uucp:x:?,?
www-data:x:?,?

當(dāng)使用特殊字符時(shí),記得要使用\來引用。

例:將小寫字母替換為大寫字母

[nosee@instance-4 ~]$ cat ddd.txt | tr a-z A-Z
ROOT:X:0,0
SSHD:X:105,65534
SYNC:X:4,65534
SYS:X:3,3
UUCP:X:10,10
WWW-DATA:X:33,33
[nosee@instance-4 ~]$ cat ddd.txt | tr [:lower:] [:upper:]
ROOT:X:0,0
SSHD:X:105,65534
SYNC:X:4,65534
SYS:X:3,3
UUCP:X:10,10
WWW-DATA:X:33,33

轉(zhuǎn)換不可見字符:

代碼 控制鍵 八進(jìn)制碼 名稱
\b ^H \010 退格
\t ^I \011 制表符
\n ^J \012 新行/換行
\r ^M \015 回車
\ 反斜線

當(dāng) tr 程序需要使用以上字符時(shí),需要使用以上的代碼或八進(jìn)制碼。如:

[nosee@instance-4 ~]$ cat ddd.txt | tr ':,' '\t'
root    x   0   0
sshd    x   105 65534
sync    x   4   65534
sys x   3   3
uucp    x   10  10
www-data    x   33  33

例:將多個(gè)空格替換為一個(gè)空格(擠壓空格)

tr -s ' ' ' ' < filename

5、sed - 非交互文本編輯

文本編輯器就是一個(gè)允許對文本執(zhí)行操作的程序,一般情況下,可以進(jìn)行插入、刪除、改變、搜索等操作。比較流行的 vim 與 emacs 這類是屬于交互式文本編輯器,而 sed 則屬于非交互式文本編輯器。

sed(stream editor 流編輯器)需要提前設(shè)計(jì)命令,然后將命令發(fā)送給程序,程序再自動地執(zhí)行命令。(stream editor for filtering and transforming text)

sed 可以從文件中讀取數(shù)據(jù),也可以從標(biāo)準(zhǔn)輸入中讀取數(shù)據(jù)。

語法:sed [OPTION]... {script-only-if-no-other-script} [input-file]...

常用選項(xiàng):

  • -i,(in-place 原地)將輸出保存到一個(gè)臨時(shí)文件,一但所有數(shù)據(jù)都成功處理完,就將臨時(shí)文件復(fù)制到原始文件。
    使用-i選項(xiàng)時(shí)應(yīng)特別小心,因?yàn)樗鼤淖冊募R话阆冗\(yùn)行一個(gè)沒有-i選項(xiàng)的命令查看,檢查沒問題后再加上-i更為穩(wěn)妥。
  • -e,執(zhí)行多條命令
  • -E-r,允許使用擴(kuò)展正則表達(dá)式

{script-only-if-no-other-script}】的語法:

  • s/search/replacement/[g],這是最常用的搜索替換模式,search為正則表達(dá)式,replacement是替換文本。默認(rèn)情況只改變每行第一個(gè)匹配到的字符串,加上g則表示全文搜索替換
  • s/search//[g],該模式中,原本replacement的內(nèi)容沒有了。意思就是,刪除所匹配到的內(nèi)容。
  • [/address|pattern/]s/search/replacement/[g],在指定的區(qū)域搜索,address表示一個(gè)或者多個(gè)行的地址,pattern是一個(gè)字符串。
    如:5s/search/replacement/[g]表示只對第5行執(zhí)行搜索替換,5,$s/search/replacement/[g]表示第5到最后一行。
    /ok/s/search/replacement/[g]表示包含ok的行,/[0-9][0-9]/s/search/replacement/[g]表示包含有兩個(gè)連續(xù)數(shù)字的行。

例:

[nosee@instance-4 ~]$ cat ddd.txt 
root:x:0,0
sshd:x:105,65534
sync:x:4,65534
sys:x:3,3
uucp:x:10,10
www-data:x:33,33
[nosee@instance-4 ~]$ sed 's/r[a-zA-Z]*t/***/g' ddd.txt 
***:x:0,0
sshd:x:105,65534
sync:x:4,65534
sys:x:3,3
uucp:x:10,10
www-data:x:33,33

例:執(zhí)行多條命令

[nosee@instance-4 ~]$ cal
    January 2022      
Su Mo Tu We Th Fr Sa  
                   1  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
30 31                 
[nosee@instance-4 ~]$ cal | sed \
> -e 's/Su/一/g' \
> -e 's/Mo/二/g' 
    January 2022      
一 二 Tu We Th Fr Sa  
                   1  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
30 31   

例:使用擴(kuò)展正則表達(dá)式,修改日期函數(shù)顯示日期時(shí)的間隔

[nosee@instance-4 ~]$ cal
    January 2022      
Su Mo Tu We Th Fr Sa  
                   1  
 2  3  4  5  6  7  8  
 9 10 11 12 13 14 15  
16 17 18 19 20 21 22  
23 24 25 26 27 28 29  
30 31                 
[nosee@instance-4 ~]$ cal | sed -E \
> -e 's/[ ]{7,}/\t\t\t\t\t\t/g' \
> -e 's/[ ]{4,}/\t\t/g' \
> -e 's/[ ]*$/-/g' \
> -e 's/[ ]{2}/ 0/g' \
> -e 's/^[ ]{1}/0/g' \
> -e '2,$s/[ ]{1}/\t/g' \
> -e 's/1-/ 1/g' \
> -e '1s/[ ]{1}/       /g' \
> -e 's/\<[0]/ /g' \
> -e 's/-//g'
        January       2022      
Su  Mo  Tu  We  Th  Fr  Sa
                         1
 2   3   4   5   6   7   8
 9  10  11  12  13  14  15
16  17  18  19  20  21  22
23  24  25  26  27  28  29
30  31  

九、分頁程序:less、more

雖然 less、more 不是過濾器,但是經(jīng)常在管道命令的最后會使用它們來顯示文本,特別是 less ,所以也需要好好了解一下。

1、less

less 程序工作在原始模式中,因此它能夠完全接管命令行和屏幕,根據(jù)自己的需要顯示行及處理字符。

基本指令 說明
hH 顯示幫助信息
q:qQ:QZZ 退出
g 跳到第一行
G 跳到最后一行
= 顯示當(dāng)前行號和文件名
<Space><PgDn>f^F^V 前進(jìn)一屏
<PgUp>b^BESC-v 后退一屏
d^D 前進(jìn)半屏
u^U 后退半屏
<Return>e^Ej^N 前進(jìn)一行
n<Return>n↓ 前進(jìn) n 行
y^Yk^K^P 后退一行
nyn↑ 后退 n 行
ng 跳到第 n 行
np 跳到文本的 n% 處
/pattern 向前搜索指定模式(可以是簡單字符串或正則表達(dá)式)
高亮顯示出所有匹配的結(jié)果,下同
?pattern 向后搜索指定模式(可以是簡單字符串或正則表達(dá)式)
n 重復(fù)搜索:相同方向
N 重復(fù)搜索:相反方向
!command 執(zhí)行指定的 shell 命令
v 使用當(dāng)前文件啟動 vi 編輯器
-option 改變指定的選項(xiàng) option(如:-i忽略大小寫,-m顯示百分比)
_option 顯示指定的選項(xiàng) option

只需要記住一些自己常用的指令就行。

處理多文件指令 說明
:n 切換到列表中的下一個(gè)文件
:p 切換到列表中的前一個(gè)文件
:x 切換到列表中的第一個(gè)文件
e 在列表中插入一個(gè)新文件
:d 從列表中刪除(移出)當(dāng)前文件
:f 顯示當(dāng)前文件的名稱,同“=
/*pattern 向前搜索指定模式 (將整個(gè)文件的列表視為一個(gè)大文件)
?*pattern 向后搜索指定模式 (將整個(gè)文件的列表視為一個(gè)大文件)

同時(shí) less 還有大量的選項(xiàng)可供使用。

常用選項(xiàng):

  • -s,(squeeze,擠壓)將多個(gè)空白行替換為一個(gè)空白行
  • -m,顯示百分比
  • -M,顯示更多信息:文件名、行號、百分比
  • -e or -E,當(dāng)文件顯示結(jié)束后,自動退出
  • -N,顯示行號
  • -i,在搜索模式中忽略大小寫

+(加號)選項(xiàng)允許指定 less 程序從什么地方開始顯示數(shù)據(jù)。(也就是基本指令表大部分顯示指定數(shù)據(jù)的命令都可以用)

例:瀏覽文件 fillename.txt,顯示當(dāng)前位置的百分比,并從匹配到'name'字符串的位置開始查看。

less -m +/name fillename.txt

例:從50%的位置開始查看數(shù)據(jù)

less +50p fillename.txt

2、more

向前分頁瀏覽文件內(nèi)容。more 可以認(rèn)為是一個(gè)簡化版的 less ,所以也不過多介紹了。

基本指令 說明
h 顯示幫助信息
qQ 退出
= 顯示當(dāng)前行號
<Space>f 前進(jìn)一屏
b^B 后退一屏 (在管道命令中該指令無效)
d^D 前進(jìn)半屏
<Return> 前進(jìn)一行
/pattern 向前搜索指定模式
/ 重復(fù)上一次搜索
!command 執(zhí)行指定的 shell 命令
v 使用當(dāng)前文件啟動 vi 編輯器

十、參考

書箱:《Unix & Linux 大學(xué)教程》第16-19章 (美)Harley Hahn 著 張杰良 譯

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,993評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內(nèi)容