2.1 cat 命令介紹
cat 命令的原含義為連接(concatenate), 用于連接多個文件內(nèi)容并輸出到標(biāo)準(zhǔn)輸出流中(標(biāo)準(zhǔn)輸出流默認(rèn)為屏幕)。實(shí)際運(yùn)用過程中,我們常使用它來顯示文件內(nèi)容。如果您熟悉MS-DOS 下的type 命令,相信不難掌握cat 命令。該命令的常用示例如下:
1 cat file1.txt 顯示 file1.txt 文件的內(nèi)容;
2
3 cat file1.txt file2.txt 顯示 file1.txt 和file2.txt 文件的內(nèi)容;
4
5 cat -n file1.txt 顯示 file1.txt 文件的內(nèi)容同時顯示行號;
2.2 vi 命令介紹
vi 是”Visual Interface” 的簡稱,它在Linux 上的地位就仿佛Edit 程序在DOS上一樣。它可以執(zhí)行輸出、刪除、查找、替換、塊操作等眾多文本操作,而且用戶可以根據(jù)自己的需要對其進(jìn)行定制,這是其他編輯程序所沒有的。
vi 不是一個排版程序,它不象Word 或WPS 那樣可以對字體、格式、段落等其他屬性進(jìn)行編排,它只是一個文本編輯程序。
vi 沒有菜單,只有命令,且命令繁多。限于篇幅,本文只介紹常用的命令。
Vi 有三種基本工作模式:命令行模式,文本輸入模式和末行模式。
命令行模式:
任何時候,不管用戶處于何種模式,只要按一下“ESC” 鍵,即可使vi 進(jìn)入命令行模式;當(dāng)在shell 環(huán)境下輸入vi 命令啟動vi 編輯器時,也是處于該模式下。
在該模式下 ,用戶可以輸入各種合法的vi 命令,用于管理自己的文檔。此時從鍵盤上輸入的任何字符都被當(dāng)作編輯命令來解釋,若輸入的字符是合法的vi 命令,則vi 在接受用戶命令之后完成相應(yīng)的動作(但需注意的是,所輸入的命令并不在屏幕上顯示出來)。若輸入的字符不是vi 的合法命令,vi 會響鈴報(bào)警。
文本輸入模式:
在命令模式下輸入插入命令 i、 附加命令a 、打開命令 o、 修改命令c 、取代命令r 或替換命令s 都可以進(jìn)入文本輸入模式。在該模式下,用戶輸入的任何字符都被vi 當(dāng)做文件內(nèi)容保存起來,并將其顯示在屏幕上。在文本輸入過程中,若想回到命令模式下,按“ESC” 鍵即可。
末行模式:
在命令模式下用戶按“:” 鍵即可進(jìn)入末行模式下,此時Vi 會在顯示窗口的最后一行(通常也是屏幕的最后一行)顯示一個“:” 作為末行模式的提示符,等待用戶輸入命令。多數(shù)文件管理命令都是在此模式下執(zhí)行的(如把編輯緩沖區(qū)的內(nèi)容寫到文件中等)末行命令執(zhí)行完后,vi 自動回到命令模式。
若在末行模式下輸入命令過程中改變了主意, 可按“ESC” 鍵或用退格鍵將輸入的命令全部刪除之后,再按一下退格鍵,即可使vi 回到命令模式下。
2.2.1 vi 的進(jìn)入與退出
在 shell 模式下,鍵入vi 及需要編輯的文件名,即可進(jìn)入vi. 例如:
1 vi example.txt
即可編輯 example.txt 文件.如果該文件存在,則編輯界面中會顯示該文件的內(nèi)容,并將光標(biāo)定位在文件的第一行;如果文件不存在,則編輯界面中無任何內(nèi)容。如果需要在進(jìn)入vi 編輯界面后,將光標(biāo)置于文件的第n 行,則在vi命令后面加上“+n” 參數(shù)即可。例如需要從example.txt 文件的第5 行開始顯示,則使用如下命令:
1 vi +5 example.txt
退出 vi 時,需要在末行模式中輸入退出命令“q”。 如果在文本輸入模式下,首先按“ESC” 鍵進(jìn)入命令模式,然后輸入“:” 進(jìn)入末行模式在末行模式下,可使用如下退出命令
1 :q 直接退出。 如果在文本輸入模式下修改了文檔內(nèi)容,則不能退出。
2
3 :wq 保存后退出。
4 :x 同“ wq”。
5
6 :q! – 不保存內(nèi)容, 強(qiáng)制退出。
2.2.2 vi 中顯示行號
在末行模式下,輸入如下命令。
1 set number
可使 vi 在編輯界面中顯示行號。
此外 ,在末行模式下,可使用如下“nu” 命令(number 的簡寫)來顯示光標(biāo)所在行的行號及該行的內(nèi)容。
2.2.3 光標(biāo)移動操作
全屏幕文本編輯器中, 光標(biāo)的移動操作無疑是最經(jīng)常使用的操作了。用戶只有熟練地使用移動光標(biāo)的這些命令,才能迅速準(zhǔn)確地到達(dá)所期望的位置處進(jìn)行編輯。
vi 中的光標(biāo)移動既可以在命令模式下,也可以在文本輸入模式下,但操作的方法不盡相同。
在文本輸入模式下, 可直接使用鍵盤上的四個方向鍵移動光標(biāo);在命令模式下,有很多移動光標(biāo)的方法。不但可以使用四個方向鍵來移動光標(biāo),還可以用h 、j、 k、 l 這四個鍵代替四個方向鍵來移動光標(biāo),這樣可以避免由于不同機(jī)器上的不同鍵盤定義所帶來的矛盾,而且使用熟練后可以手不離開字母鍵盤位置就能完成所有操作, 從而提高工作效率。
以下命令均在命令行模式下完成光標(biāo)移動:
h 光標(biāo)左移, 如果在按h 命令前輸入數(shù)字n ,則光標(biāo)左移n 個字符;
l 光標(biāo)右移 ,如果在按l 命令前輸入數(shù)字n, 則光標(biāo)右移n 個字符;
j 光標(biāo)上移, 如果在按j 命令前輸入數(shù)字n, 則光標(biāo)上移n 個字符;
k 光標(biāo)下移, 如果在按k 命令前輸入數(shù)字n ,則光標(biāo)xia 移n 個字符;
0 (零) 光標(biāo)移到行首;
$ 光標(biāo)移到行尾;
H 光標(biāo)移到屏幕上顯示的第一行 (并不一定是文件頭);
L 光標(biāo)移到屏幕上顯示的最后一行 (并不一定是文件尾);
M 光標(biāo)移到屏幕的中間一行;
nG 光標(biāo)移到第 n 行;
w或W 將光標(biāo)右移至下一個單詞的詞首;
e 或E 如果光標(biāo)起始位置處于單詞內(nèi)(即非單詞尾處),則該命令將把光標(biāo)移到本單詞詞尾;如果光標(biāo)起始位置處于單詞尾,則該命令將把光標(biāo)移動到下一個單詞的詞尾。
b 或B 如果光標(biāo)處于所在單詞內(nèi)(即非單詞首),則該命令將把光標(biāo)移至本單詞詞首;如果光標(biāo)處于所在單詞的詞首,則該命令將把光標(biāo)移到上一個單詞的詞首;
Ctrl+G 狀態(tài)命令, 顯示當(dāng)前編輯文檔的狀態(tài)。包括正在編輯的文件名、是否修改過、當(dāng)前行號、文件的行數(shù)以及光標(biāo)之前的行占整個文件的百分比。
此外 ,也可以通過以下末行模式下的命令完成光標(biāo)在整個文件中的移動操作:
:n 光標(biāo)移到文件的第n 行;
:$ 光標(biāo)移到文件的最后一行;
2.2.4 文本插入操作
在命令模式下 ,用戶輸入的任何字符都被vi 當(dāng)作命令加以解釋執(zhí)行,如果用戶要將輸入的字符當(dāng)作是文本內(nèi)容時,則首先應(yīng)將vi 的工作模式從命令模式切換到文本輸入模式。切換的方式是使用下面的命令:
1. 插入(Insert) 命令
vi 提供了兩個插入命令:i 和I。
(1) . i 命令插入文本從光標(biāo)所在位置前開始, 并且插入過程中可以使用鍵刪除錯誤的輸入。此時vi 處于插入狀態(tài),屏幕最下行顯示“–INSERT–” 插入字樣。
(2) . I 命令 該命令是將光標(biāo)移到當(dāng)前行的行首, 然后在其前插入文本。
2. 附加(append) 命令
vi 提供了兩個附加插入命令:a 和A。
(1) . a 命令該命令用于在光標(biāo)當(dāng)前所在位置之后追加新文本, 新輸入的文本放在光標(biāo)之后,在光標(biāo)后的原文本將相應(yīng)地向后移動,光標(biāo)可在一行的任何位置。
(2) . A 命令 該命令與 a 命令不同的是,A 命令將把光標(biāo)挪到所在行的行尾,從那里開始插入新文本,當(dāng)輸入A 命令后光,標(biāo)自動移到該行的行尾。
a 和A 命令是把文本插入到行尾的唯一方法。
3. 打開open 命令
不論是 Insert 命令也好,還是append 命令也好,所插入的內(nèi)容都是從當(dāng)前行中的某個位置開始的。若我們希望在某行之前或某行之后插入一些新行,則應(yīng)使用open 命令。
vi 提供了兩個打開命令:o 和O。
(1) . o 命令該命令將在光標(biāo)所在行的下面新開一行, 并將光標(biāo)置于該行的行首,等待輸入文本。要注意當(dāng)使用刪除字符時只能刪除從插入模式開始的位置以后的字符,對于以前的字符不起作用。
(2) . O 命令和 o 命令相反,O 命令是在光標(biāo)所在行的上面插入一行,并將光標(biāo)置于該行的行首,等待輸入文本。
2.2.5 文本修改操作
在命令模式下可以使用 vi 提供的各種有關(guān)命令對文本進(jìn)行修改,包括對文本內(nèi)容的刪除、復(fù)制、取代和替換等。
1. 文本刪除/移動
在編輯文本時 ,經(jīng)常需要刪除一些不需要的文本,我們可以用鍵將輸錯或不需要的文本刪除,但此時有一個限制就是當(dāng)刪到行頭之后,再想刪上面那行的內(nèi)容是不可能的。
在命令模式下, vi 提供了許多刪除命令這些命令。大多是以d 開頭的。常用的有:
(1) . 刪除單個字符
x 刪除光標(biāo)處的字符。 若在x 之前加上一個數(shù)字n ,則刪除從光標(biāo)所在位置開始向右的n 個字符。
X 刪除光標(biāo)前面的那個字符,若在X之前加上一個數(shù)字n, 則刪除從光標(biāo)前面那個字符開始向左的n 個字符。
顯然這兩個命令是刪除少量字符的快捷方法。
(2) . 刪除多個字符
dd 刪除光標(biāo)所在的整行。 在dd 前可加上一個數(shù)字n ,表示刪除當(dāng)前行及其后n-1 行的內(nèi)容。
D 或d$ 兩命令功能一樣, 都是刪除從光標(biāo)所在處開始到行尾的內(nèi)容。
d0 刪除從光標(biāo)前一個字符開始到行首的內(nèi)容。
dw 刪除一個單詞 。若光標(biāo)處在某個詞的中間,則從光標(biāo)所在位置開始刪至詞尾。同dd 命令一樣,可在dw之前加一個數(shù)字n 。表示刪除n 個指定的單詞。
如果用戶不小心進(jìn)行了誤刪除操作,也不要緊vi ,提供了恢復(fù)誤操作的命令,并且可以將恢復(fù)的內(nèi)容移動,放在文本的任何地方?;謴?fù)命令用“np”, 其中n 為需要恢復(fù)的次數(shù)。例如使用dd 命令刪除了一行內(nèi)容,然后使用“2p”命令,則被刪除的內(nèi)容會被重新插入兩遍。
通過 dd 命令及p 命令的結(jié)合使用,可以很方便的實(shí)現(xiàn)文本行的移動操作。
2. 文本復(fù)制命令
yy 復(fù)制光標(biāo)所在的整行。 在yy 前可加上一個數(shù)字n ,表示復(fù)制當(dāng)前行及其后n-1 行的內(nèi)容。
文本行復(fù)制后, 通過使用上面介紹的“p” 命令,可以將文本行粘貼到任何地方。
dd、 yy 及p 命令在vi 中的作用,類似于Windows 中圖形編輯程序的“剪切”、“復(fù)制”及“粘貼”命令。
3. 取消上一命令(Undo)
取消上一命令 (Undo), 也稱復(fù)原命令,是非常有用的命令,它可以取消前一次的誤操作或不合適的操作對文件造成的影響,使之回復(fù)到這種誤操作或不合適操作被執(zhí)行之前的狀態(tài)。
取消上一命令有兩種形式, 在命令模式下鍵入字符u 和U 它們的功能都是取消剛才輸入的命令,恢復(fù)到原來的情況。小寫u 和大寫U 在具體細(xì)節(jié)上有所不同,二者的區(qū)別在于,大寫U命令的功能是恢復(fù)到誤操作命令前的情況,即如果插入命令后使用U 命令,就刪除剛剛插入的內(nèi)容;如果刪除命令后使用U 命令,就相當(dāng)于在光標(biāo)處又插入剛剛刪除的內(nèi)容。這里把所有修改文本的命令都視為插入命令,也就是說U 命令只能取消前一步操作,如果用U命令撤消了前一步操作,當(dāng)再按U 鍵時,并不是撤消再前一步的操作,而是撤消了剛才U命令執(zhí)行的操作,也就是又恢復(fù)到第一次使用U 命令之前的狀態(tài),結(jié)果是什么都沒做。而小寫u 命令的功能是把當(dāng)前行恢復(fù)成被編輯前的狀態(tài),而不管此行被編輯了多少次。
4. 重復(fù)命令(Redo)
重復(fù)命令也是一個非常常用的命令。 在文本編輯中經(jīng)常會碰到需要機(jī)械地重復(fù)一些操作,這時就需要用到重復(fù)命令。它可以讓用戶方便地再執(zhí)行一次前面剛完成的某個復(fù)雜的命令。
重復(fù)命令只能在命令模式下工作, 在該模式下按“.” 鍵既可。執(zhí)行一個重復(fù)命令時,其結(jié)果是依賴于光標(biāo)當(dāng)前位置的。
2.2.6 文本搜索與替換操作
在進(jìn)行文本編輯的時候,,您可以需要搜索或定位特定的單詞或單詞的一部分。vi 編輯器有向前或向后搜索指定模式的功能。
“/” 是vi 編輯器的模式搜索命令。鍵入“/” 后,屏幕的底部會出現(xiàn)一行,同時一個斜扛會出現(xiàn)在底行的行首上,且光標(biāo)被放置在斜扛之后。此時,您可以在光標(biāo)位置鍵入你需要搜索的模式。輸入完成并按下 ENTER鍵后,編輯器將開始從光標(biāo)所在的位置起向文件尾部搜索你鍵入的模式。如果輸入的模式被找到,光標(biāo)將停留在找到的模式上。在找到一個匹配的模式 后,如果您還需要搜索下一個匹配的模式,使用命令“n” 即可;如果需要找到上一個匹配的模式,則使用“N” 命令即可。
此外,“ ?” 命令也是模式搜索命令。與“/” 的區(qū)別在于/ 是從光標(biāo)當(dāng)
前所在位置向文件尾部搜索,而“?” 命令則是由光標(biāo)當(dāng)前所在位置向文件頭部搜索。
文本替換操作需要使用末行模式進(jìn)行操作 即所有文本替換操作命令均以“:”開頭。
文本替換命令的格式為:
:s/text1/text2 用于將光標(biāo)所在段落搜索到的第一個 “text1” 替換為“text2”;
:s/text1/text2/g 用于將光標(biāo)所在段落的所有 “text1 ”替換為“text2”;
:m,ns/text1/text2/g 用于將從 m行開始至n 行結(jié)束的所有搜索到的“text1”替換為text2。 其中可以使用$表示末行,即“1,$” 表示替換文檔中的所有符合條件的字符。