觀看檔案內(nèi)容:cat, tac, more, less, head, tail, nl,
剛剛我們提到的都只是在于顯示檔案的外觀,或者是移動(dòng)與復(fù)制一個(gè)檔案或目錄而已,那么如果我們要視察一個(gè)檔案的內(nèi)容時(shí),該如何是好呢?!這里有相當(dāng)多有趣的指令可以來(lái)分享一下:最常使用的顯示檔案內(nèi)容的指令可以說是 cat 與 more 及 less 了!此外,如果我們要查看一個(gè)很大型的檔案(好幾百M(fèi)B時(shí)),但是我們只需要后端的幾行字而已,那么該如何是好?呵呵!用 tail 呀,此外, tac 這個(gè)指令也可以達(dá)到!好了,說說各個(gè)指令的用途吧!
cat 由第一行開始顯示檔案內(nèi)容
tac 從最后一行開始顯示,可以看出 tac 是 cat 的倒著寫!
more 一頁(yè)一頁(yè)的顯示檔案內(nèi)容
less 與 more 類似,但是比 more 更好的是,他可以往前翻頁(yè)!
head 只看頭幾行
tail 只看尾巴幾行
nl 顯示的時(shí)候,順道輸出 行號(hào)!
od 以二進(jìn)制的方式讀取檔案內(nèi)容!
底下我們來(lái)談一談每個(gè)指令的基本用法吧!
--------------------------------------------------------------------------------
· cat
語(yǔ)法:
[root @test /root ]# cat [-nAE]
參數(shù)說明:
-n: 顯示時(shí),連行號(hào)印出屏幕上。
-A: 將 DOS 下的 <tab> 與斷行字符都列出來(lái)!
-E: 將 DOS 編輯的文件中,僅列出斷行字符出來(lái)!
范例:
[root @test /root]# cat ~/.bashrc <==顯示 .bashrc 這個(gè)檔案
# .bashrc
# User specific aliases and functions
PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias ll='ls -l --color=never'
[root @test /root]# cat ~/.bashrc -n <==顯示 .bashrc 并且加上行號(hào)!
1 # .bashrc
2
3 # User specific aliases and functions
4 PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
6 alias rm='rm -i'
7 alias cp='cp -i'
8 alias mv='mv -i'
9 alias ll='ls -l --color=never'
[root @test /root]# cat -A regexp.txt
This is a cat, however, I need a dog.^M$
I want to "Happy" and <Happy> and /Happy/ here.^M$
OK! ^Ieverythins is OK^M$
Now, I will eat my food^M$
are you ^Ifinished your work^M$
what do you 123 goto where^M$
顯示出 DOS 檔案的幾個(gè)特殊符號(hào),以上面檔案為例,
可發(fā)現(xiàn) ^M 為斷行符號(hào),而每行的 $ 為行尾符號(hào),
至于 ^I 則是 <tab> 按鍵啦!
說明:
嘿嘿! Linux 里面有『貓』?!喔!不是的, cat 是 Concatenate (連續(xù))的簡(jiǎn)寫,主要的功能是將一個(gè)檔案的內(nèi)容連續(xù)的印出在屏幕上面!例如上面的例子中,我們將重要的參數(shù)檔 .bashrc 印出來(lái)!如果加上 -n 的話,則每一行前面還會(huì)加上行號(hào)呦!cat 比較少用!畢竟當(dāng)你的檔案內(nèi)容的行數(shù)超過 40 行以上,嘿嘿!根本來(lái)不及看!所以,配合 more 或者是 |more 來(lái)執(zhí)行比較好!此外,如果是一般的 DOS 檔案時(shí),就需要特別留意一些奇奇怪怪的符號(hào)了,例如斷行與<tab>等,要顯示出來(lái),就得加入 -A 之類的參數(shù)了!。
--------------------------------------------------------------------------------
· tac
語(yǔ)法:
[root @test /root ]# tac [檔名]
參數(shù)說明:
范例:
[root @test /root]# tac ~/.bashrc <==發(fā)現(xiàn)了沒?反向印出呦!
fi
. /etc/bashrc
if [ -f /etc/bashrc ]; then
# Source global definitions
alias h='history'
alias lm='ls -al|more'
alias ll='ls -l'
# alias ll='ls -l --color=never'
alias mv='mv -i'
alias cp='cp -i'
alias rm='rm -i'
export PATH
PATH="/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:$PATH"
# User specific aliases and functions
# .bashrc
說明:
tac 這個(gè)好玩了!怎么說呢?詳細(xì)的看一下, cat 與 tac ,有沒有發(fā)現(xiàn)呀!對(duì)啦! tac 剛好是將 cat 反寫過來(lái),所以他的功能就跟 cat 相反啦, cat 是由『第一行到最后一行連續(xù)顯示在屏幕上』,而 tac 則是『由最后一行到第一行反向在屏幕上顯示出來(lái)』,很好玩吧!
--------------------------------------------------------------------------------
· more
語(yǔ)法:
[root @test /root ]# more [檔名]
參數(shù)說明:
范例:
[root @test /root]# more ~/.bashrc <==一頁(yè)一頁(yè)的顯示檔案內(nèi)容
[root @test /]# ls -al | more <==一頁(yè)一頁(yè)的將 ls 的內(nèi)容顯示出來(lái)
說明:
more 真是個(gè)很有用的指令!我好喜歡呦!當(dāng)你的檔案太大的時(shí)后,那么使用 cat 將沒有辦法看清楚!這個(gè)時(shí)候你可以使用 more 來(lái)做動(dòng)作!more 也可以用來(lái)做為管線的同時(shí)執(zhí)行之用!例如你在執(zhí)行 find 這個(gè)尋找的指令時(shí),可以同時(shí)使用 |more ,則搜尋結(jié)果可以一頁(yè)一頁(yè)的列出呦!關(guān)于管線( pipe )的用法我們?cè)?bash shell 的地方再來(lái)談!
--------------------------------------------------------------------------------
· less
語(yǔ)法:
[root @test /root ]# less [檔名]
參數(shù)說明:
范例:
[root @test /root]# less ~/.bashrc
說明:
less 的用法比起 more 又更加的有彈性,怎么說呢?在 more 的時(shí)候,我們并沒有辦法向前面翻,只能往后面看,但若使用了 less 時(shí),呵呵!就可以使用 [pageup] [pagedown] 等按鍵的功能來(lái)往前往后翻看文件,您瞧,是不是更容易使用來(lái)觀看一個(gè)檔案的內(nèi)容了呢???
more 與 less 的用途與用法真的是很廣啦!首先,你可以在 more 與 less 的畫面中進(jìn)行『搜尋』的工作!如何進(jìn)行呢?我們以 less 來(lái)說明好了,如果你想要知道 /etc/man.config 這個(gè)檔案里面有沒有一個(gè)叫做 GER 的大寫字眼,那么可以:
[root @test /root ]# less /etc/man.config
按鍵說明:
/word:在 /etc/man.config 這個(gè)檔案中搜尋 word 這個(gè)字符串的所在
q :離開 less 的畫面
然后在輸入 / 之后,光標(biāo)會(huì)移動(dòng)到最左下角等待輸入,這個(gè)時(shí)候您只要輸入你的字符串之后,就會(huì)自動(dòng)的幫你找出來(lái)該關(guān)鍵詞啰!
名稱:less
使用權(quán)限:所有使用者
使用方式:less [Option] filename
說明:less 的作用與 more 十分相似,都可以用來(lái)瀏覽文字檔案的內(nèi)容,不同的是 less 允許使用者往回卷動(dòng)以瀏覽已經(jīng)看過的部份,同時(shí)因?yàn)?less 并未在一開始就讀入整個(gè)檔案,因此在遇上大型檔案的開啟時(shí),會(huì)比一般的文書編輯器(如 vi)來(lái)的快速。
注:
名稱:more
使用權(quán)限:所有使用者
使用方式:more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
說明:類似 cat ,不過會(huì)以一頁(yè)一頁(yè)的顯示方便使用者逐頁(yè)閱讀,而最基本的指令就是按空白鍵(space)就往下一頁(yè)顯示,按 b 鍵就會(huì)往回(back)一頁(yè)顯示,而且還有搜尋字串的功能(與 vi 相似),使用中的說明文件,請(qǐng)按 h 。
參數(shù):-num 一次顯示的行數(shù)
-d 提示使用者,在畫面下方顯示 [Press space to continue, 'q' to quit.] ,如果使用者按錯(cuò)鍵,則會(huì)顯示 [Press 'h' for instructions.] 而不是 '嗶' 聲
-l 取消遇見特殊字元 ^L(送紙字元)時(shí)會(huì)暫停的功能
-f 計(jì)算行數(shù)時(shí),以實(shí)際上的行數(shù),而非自動(dòng)換行過后的行數(shù)(有些單行字?jǐn)?shù)太長(zhǎng)的會(huì)被擴(kuò)展為兩行或兩行以上)
-p 不以卷動(dòng)的方式顯示每一頁(yè),而是先清除螢?zāi)缓笤亠@示內(nèi)容
-c 跟 -p 相似,不同的是先顯示內(nèi)容再清除其他舊資料
-s 當(dāng)遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行
-u 不顯示下引號(hào) (根據(jù)環(huán)境變數(shù) TERM 指定的 terminal 而有所不同)
+/ 在每個(gè)檔案顯示前搜尋該字串(pattern),然后從該字串之后開始顯示
+num 從第 num 行開始顯示
fileNames 欲顯示內(nèi)容的檔案,可為復(fù)數(shù)個(gè)數(shù)
范例:
more -s testfile 逐頁(yè)顯示 testfile 之檔案內(nèi)容,如有連續(xù)兩行以上空白行則以一行空白行顯示。
more +20 testfile 從第 20 行開始顯示 testfile 之檔案內(nèi)容。
--------------------------------------------------------------------------------
· head
語(yǔ)法:
[root @test /root ]# head [-n number] [檔名]
參數(shù)說明:
-n :顯示 number 行
范例:
[root @test /root]# head ~/.bashrc <==預(yù)設(shè)情況下,顯示頭十行
[root @test /root]# head -n 20 ~/.bashrc<==顯示頭二十行!
說明:
head 的英文意思就是『頭』啦,那么這個(gè)東西的用法自然就是顯示出一個(gè)檔案的前幾行啰!沒錯(cuò)!就是這樣!若沒有加上 -n 這個(gè)參數(shù)時(shí),預(yù)設(shè)只顯示十行,若只要一行呢?那就加入『 head -n 1 filename 』即可!
--------------------------------------------------------------------------------
· tail
語(yǔ)法:
[root @test /root ]# tail [-n number] [檔名]
參數(shù)說明:
-n :顯示 number 行
范例:
[root @test /root]# tail ~/.bashrc
[root @test /root]# tail -n 5 ~/.bashrc <==只顯示最后面五行!
說明:
那么有 head 自然就有 tail ( 尾巴 ) 啰!沒錯(cuò)!這個(gè) tail 的用法跟 head 的用法差不多類似,只是顯示的是后面幾行就是了!預(yù)設(shè)也是顯示十行,若要顯示非十行,就加 -n number 的參數(shù)!
例題一:假如我想要顯示 ~/.bashrc 的第 11 到第 20 行呢?
答:
這個(gè)應(yīng)該不算難,想一想,在第 11 到第 20 行,那么我取前 20 行,再取后十行,所以結(jié)果就是:『 head –n 20 ~/.bashrc | tail –n 10 』,這樣就可以得到第 11 到第 20 行之間的內(nèi)容了!但是里面涉及到管線命令,需要在第三篇的時(shí)候才講的到!
--------------------------------------------------------------------------------
· nl
語(yǔ)法:
[root @test /root ]# nl [檔名]
參數(shù)說明:
范例:
[root @test /root]# nl ~/.bashrc
說明:
那么 nl 又是什么?這也沒什么,這個(gè)指令的用法跟 cat -n 的用法類似,也就是『可以印出行號(hào)』的指令來(lái)查看檔案啦!也是挺好用的!
--------------------------------------------------------------------------------
· od
語(yǔ)法:
[root @test /root ]# od [檔名]
參數(shù)說明:
范例:
[root @test /root]# od ~/.bashrc
0000000 020043 061056 071541 071150 005143 021412 052440 062563
0000020 020162 070163 061545 063151 061551 060440 064554 071541
0000040 071545 060440 062156 063040 067165 072143 067551 071556
0000060 050012 052101 036510 027442 064542 035156 071457 064542
0000100 035156 072457 071163 071457 064542 035156 072457 071163
0000120 061057 067151 027472 071565 027562 067554 060543 027554
0000140 061163 067151 027472 071565 027562 067554 060543 027554
0000160 064542 035156 050044 052101 021110 062412 070170 071157
0000200 020164 040520 044124 005012 066141 060551 020163 066562
0000220 023475 066562 026440 023551 060412 064554 071541 061440
0000240 036560 061447 020160 064455 005047 066141 060551 020163
0000260 073155 023475 073155 026440 023551 021412 060440 064554
0000300 071541 066040 036554 066047 020163 066055 026440 061455
0000320 066157 071157 067075 073145 071145 005047 066141 060551
0000340 020163 066154 023475 071554 026440 023554 060412 064554
0000360 071541 066040 036555 066047 020163 060455 076154 067555
0000400 062562 005047 066141 060551 020163 036550 064047 071551
0000420 067564 074562 005047 021412 051440 072557 061562 020145
0000440 066147 061157 066141 062040 063145 067151 072151 067551
0000460 071556 064412 020146 020133 063055 027440 072145 027543
0000500 060542 064163 061562 056440 020073 064164 067145 004412
0000520 020056 062457 061564 061057 071541 071150 005143 064546
0000540 000012
0000541
說明:
好了,那么如果有一個(gè)非 ASCII 的數(shù)據(jù)文件呢?例如那個(gè) binary 的檔案!使用 vi 根本就是看不著~這個(gè)時(shí)候看來(lái)只有使用將整個(gè)數(shù)據(jù)以數(shù)值方法讀出來(lái)啦!那就是 od 這個(gè)指令來(lái)讀出來(lái)呦!這個(gè)東西可以用來(lái)輸出該數(shù)據(jù)為十進(jìn)制、16進(jìn)位等等的數(shù)據(jù)格式!不過這個(gè)東西對(duì)于工程師可能比較有用啦!因?yàn)橛〕鰜?lái)的東西都是數(shù)字或內(nèi)存當(dāng)中的數(shù)據(jù)~~
補(bǔ)充一點(diǎn):在vi中使用命令的方法是:冒號(hào)+命令+回車,如:q 回車代表退出。
==========================================================
文本編輯器是所有計(jì)算機(jī)系統(tǒng)中最常用的一種工具。UNIX下的編輯器有ex,sed和vi等,其中,使用最為廣泛的是vi,而vi命令繁多,論壇里好像這方面的總結(jié)不多,以下稍做總結(jié),以資共享!渴望更正和補(bǔ)充!
進(jìn)入vi的命令
vi filename :打開或新建文件,并將光標(biāo)置于第一行首
vi +n filename :打開文件,并將光標(biāo)置于第n行首
vi + filename :打開文件,并將光標(biāo)置于最后一行首
vi +/pattern filename:打開文件,并將光標(biāo)置于第一個(gè)與pattern匹配的串處
vi -r filename :在上次正用vi編輯時(shí)發(fā)生系統(tǒng)崩潰,恢復(fù)filename
vi filename....filename :打開多個(gè)文件,依次進(jìn)行編輯
在vi中按u可以撤銷一次操作
u 撤銷上一步的操作
Ctrl+r 恢復(fù)上一步被撤銷的操作
移動(dòng)光標(biāo)類命令
h :光標(biāo)左移一個(gè)字符
l :光標(biāo)右移一個(gè)字符
space:光標(biāo)右移一個(gè)字符
Backspace:光標(biāo)左移一個(gè)字符
k或Ctrl+p:光標(biāo)上移一行
j或Ctrl+n :光標(biāo)下移一行
Enter :光標(biāo)下移一行
w或W :光標(biāo)右移一個(gè)字至字首
b或B :光標(biāo)左移一個(gè)字至字首
e或E :光標(biāo)右移一個(gè)字至字尾
) :光標(biāo)移至句尾
( :光標(biāo)移至句首
}:光標(biāo)移至段落開頭
{:光標(biāo)移至段落結(jié)尾
nG:光標(biāo)移至第n行首
n+:光標(biāo)下移n行
n-:光標(biāo)上移n行
n$:光標(biāo)移至第n行尾
H :光標(biāo)移至屏幕頂行
M :光標(biāo)移至屏幕中間行
L :光標(biāo)移至屏幕最后行
0:(注意是數(shù)字零)光標(biāo)移至當(dāng)前行首
$:光標(biāo)移至當(dāng)前行尾
屏幕翻滾類命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:將第n行滾至屏幕頂部,不指定n時(shí)將當(dāng)前行滾至屏幕頂部。
插入文本類命令
i :在光標(biāo)前
I :在當(dāng)前行首
a:光標(biāo)后
A:在當(dāng)前行尾
o:在當(dāng)前行之下新開一行
O:在當(dāng)前行之上新開一行
r:替換當(dāng)前字符
R:替換當(dāng)前字符及其后的字符,直至按ESC鍵
s:從當(dāng)前光標(biāo)位置處開始,以輸入的文本替代指定數(shù)目的字符
S:刪除指定數(shù)目的行,并以所輸入文本代替之
ncw或nCW:修改指定數(shù)目的字
nCC:修改指定數(shù)目的行
刪除命令
ndw或ndW:刪除光標(biāo)處開始及其后的n-1個(gè)字
do:刪至行首
d$:刪至行尾
ndd:刪除當(dāng)前行及其后n-1行
x或X:刪除一個(gè)字符,x刪除光標(biāo)后的,而X刪除光標(biāo)前的
Ctrl+u:刪除輸入方式下所輸入的文本
搜索及替換命令
/pattern:從光標(biāo)開始處向文件尾搜索pattern
pattern:從光標(biāo)開始處向文件首搜索pattern
n:在同一方向重復(fù)上一次搜索命令
N:在反方向上重復(fù)上一次搜索命令
:s/p1/p2/g:將當(dāng)前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:將第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:將文件中所有p1均用p2替換
選項(xiàng)設(shè)置
all:列出所有選項(xiàng)設(shè)置情況
term:設(shè)置終端類型
ignorance:在搜索中忽略大小寫
list:顯示制表位(Ctrl+I)和行尾標(biāo)志($)
number:顯示行號(hào)
report:顯示由面向行的命令修改過的數(shù)目
terse:顯示簡(jiǎn)短的警告信息
warn:在轉(zhuǎn)到別的文件時(shí)若沒保存當(dāng)前文件則顯示NO write信息
nomagic:允許在搜索模式中,使用前面不帶“\”的特殊字符
nowrapscan:禁止vi在搜索到達(dá)文件兩端時(shí),又從另一端開始
mesg:允許vi顯示其他用戶用write寫到自己終端上的信息
最后行方式命令
:n1,n2 co n3:將n1行到n2行之間的內(nèi)容拷貝到第n3行下
:n1,n2 m n3:將n1行到n2行之間的內(nèi)容移至到第n3行下
:n1,n2 d :將n1行到n2行之間的內(nèi)容刪除
:w :保存當(dāng)前文件
:e filename:打開文件filename進(jìn)行編輯
:x:保存當(dāng)前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:執(zhí)行shell命令command
:n1,n2 w!command:將文件中n1行至n2行的內(nèi)容作為command的輸入并執(zhí)行之,若不指定n1,n2,則表示將整個(gè)文件內(nèi)容作為command的輸入
:r!command:將命令command的輸出結(jié)果放到當(dāng)前行
寄存器操作
"?nyy:將當(dāng)前行及其下n行的內(nèi)容保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyw:將當(dāng)前行及其下n個(gè)字保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?nyl:將當(dāng)前行及其下n個(gè)字符保存到寄存器?中,其中?為一個(gè)字母,n為一個(gè)數(shù)字
"?p:取出寄存器?中的內(nèi)容并將其放到光標(biāo)位置處。這里?可以是一個(gè)字母,也可以是一個(gè)數(shù)字
ndd:將當(dāng)前行及其下共n行文本刪除,并將所刪內(nèi)容放到1號(hào)刪除寄存器中。
VI的使用
--------------------------------------------------------------------------------
一、插入文本
┌──┬────────────┐
│命令│描述 │
├──┼────────────┤
│i │在當(dāng)前字符前插入文本 │
├──┼────────────┤
│I │在行首插入文本 │
├──┼────────────┤
│a │在當(dāng)前字符后添加文本 │
├──┼────────────┤
│A │在行末添加文本 │
├──┼────────────┤
│o │在當(dāng)前行后面插入一空行 │
├──┼────────────┤
│O │在當(dāng)前行前面插入一空行 │
├──┼────────────┤
│R │以改寫方式輸入文本 │
└──┴────────────┘
二、移動(dòng)光標(biāo)
┌─────┬───────────┐
│命令 │描述 │
├─────┼───────────┤
│j或下箭頭 │向下移動(dòng)一行 │
├─────┼───────────┤
│k或上箭頭 │向上移動(dòng)一行 │
├─────┼───────────┤
│h或左箭頭 │左移一個(gè)字符 │
├─────┼───────────┤
│l或右箭頭 │右移一個(gè)字符 │
├─────┼───────────┤
│w │右移一個(gè)詞 │
├─────┼───────────┤
│W │右移一個(gè)以空格分隔的詞│
├─────┼───────────┤
│b │左移一個(gè)詞 │
├─────┼───────────┤
│B │左移一個(gè)以空格分隔的詞│
├─────┼───────────┤
│0 │移到行首 │
│Ctrl-F │向前翻頁(yè) │
├─────┼───────────┤
│Ctrl-B │向后翻頁(yè) │
├─────┼───────────┤
│nG │到第n行 │
├─────┼───────────┤
│G │到最后一行 │
└─────┴───────────┘
三、替換文本
┌─────┬──────┐
│命令 │描述 │
├─────┼──────┤
│$ │到行尾 │
├─────┼──────┤
│( │到句子的開頭│
├─────┼──────┤
│) │到句子的末尾│
├─────┼──────┤
│{ │到段落的開頭│
├─────┼──────┤
│} │到段落的末尾│
└─────┴──────┘
四、刪除文本
┌───┬───────────┐
│命令 │描述 │
├───┼───────────┤
│r │替換一個(gè)字符 │
├───┼───────────┤
│c │修改文本直到按下Esc健 │
├───┼───────────┤
│cw │修改下一個(gè)詞 │
├───┼───────────┤
│cnw │修改接下來(lái)的n個(gè)詞 │
└───┴───────────┘
五、文本編輯
┌──┬──────────────────────┐
│命寺│描述 │
├──┼──────────────────────┤
│yy │將一行文本移到缺省緩沖區(qū)中 │
├──┼──────────────────────┤
│yn │將下一個(gè)詞移到缺省緩沖區(qū)中 │
├──┼──────────────────────┤
│ynw │將后面的n個(gè)詞移到缺省緩沖區(qū)中 │
├──┼──────────────────────┤
│p │如果缺省緩沖區(qū)中包含一行文本,則在當(dāng)前 │
│ │行后面插入一個(gè)空行井將缺省緩沖區(qū)中的聲 │
│ │容粘貼到這一行中;如果缺省緩沖區(qū)中包含 │
│ │多個(gè)詞,把這些詞粘貼到光標(biāo)的右邊. │
├──┼──────────────────────┤
│P │如果缺省緩沖區(qū)中包含一行文本,則正當(dāng)前 │
│ │行前面插入一個(gè)空行井將缺省緩沖區(qū)中的內(nèi) │
│ │容粘貼到這一行中;如果缺省緩沖區(qū)中包含 │
│ │多個(gè)詞,把這些詞粘貼到光標(biāo)的左邊 │
└──┴──────────────────────┘
六、保存退出
┌───────────┬───────────────┐
│命令 │描述 │
├───────────┼───────────────┤
│zz │保存并退出 │
├───────────┼───────────────┤
│:w filename │寫入文件 │
├───────────┼───────────────┤
│:W │寫入文件 │
├───────────┼───────────────┤
│:x │保存(如果當(dāng)前文件修改過)并退出│
├───────────┼───────────────┤
│:q! │不保存文件,直接退出 │
├───────────┼───────────────┤
│:q │退出vi │
└───────────┴───────────────┘
VI常用技巧
ideal(2002-01-29 11:24)
〖返回〗〖轉(zhuǎn)發(fā)〗
VI命令可以說是Unix/Linux世界里最常用的編輯文件的命令了,但是因?yàn)樗拿罴姸?,很多人都不?xí)慣使用它,其實(shí)您只需要掌握基本命令,然后加以靈活運(yùn)用,就會(huì)發(fā)現(xiàn)它的優(yōu)勢(shì),并會(huì)逐漸喜歡使用這種方法。本文旨在介紹VI的一些最常用命令和高級(jí)應(yīng)用技巧。
一、基本命令介紹
---- 1.光標(biāo)命令
k、j、h、l——上、下、左、右光標(biāo)移動(dòng)命令。雖然您可以在Linux中使用鍵盤右邊的4個(gè)光標(biāo)鍵,但是記住這4個(gè)命令還是非常有用的。這4個(gè)鍵正是右手在鍵盤上放置的基本位置。
nG——跳轉(zhuǎn)命令。n為行數(shù),該命令立即使光標(biāo)跳到指定行。
Ctrl+G——光標(biāo)所在位置的行數(shù)和列數(shù)報(bào)告。
w、b——使光標(biāo)向前或向后跳過一個(gè)單詞。
---- 2.編輯命令
i、a、r——在光標(biāo)的前、后以及所在處插入字符命令(i=insert、a=append、r=replace)。
cw、dw——改變(置換)/刪除光標(biāo)所在處的單詞的命令 (c=change、d=delete)。
x、d$、dd——?jiǎng)h除一個(gè)字符、刪除光標(biāo)所在處到行尾的所有字符以及刪除整行的命令。
---- 3.查找命令
---- /string、?string——從光標(biāo)所在處向后或向前查找相應(yīng)的字符串的命令。
---- 4.拷貝復(fù)制命令
---- yy、p——拷貝一行到剪貼板或取出剪貼板中內(nèi)容的命令。
二、常見問題及應(yīng)用技巧
---- 1.在一個(gè)新文件中讀/etc/passwd中的內(nèi)容,取出用戶名部分。
---- vi file
---- :r /etc/passwd 在打開的文件file中光標(biāo)所在處讀入/etc/passwd
---- :%s/:.*//g 刪除/etc/passwd中用戶名后面的從冒號(hào)開始直到行尾的所有部分。
---- 您也可以在指定的行號(hào)后讀入文件內(nèi)容,例如使用命令“:3r /etc/passwd”從新文件的第3行開始讀入 /etc/passwd的所有內(nèi)容。
---- 我們還可以使用以下方法刪掉文件中所有的空行及以#開始的注釋行。
---- #cat squid.conf.default | grep -v ^$ | grep -v ^#
---- 2.在打開一個(gè)文件編輯后才知道登錄的用戶對(duì)該文件沒有寫的權(quán)限,不能存盤,需要將所做修改存入臨時(shí)文件。
---- vi file
---- :w /tmp/1 保存所做的所有修改,也可以將其中的某一部分修改保存到臨時(shí)文件,例如僅僅把第20~59行之間的內(nèi)容存盤成文件/tmp/1,我們可以鍵入如下命令。
---- vi file
---- :20,59w /tmp/1
---- 3.用VI編輯一個(gè)文件,但需要?jiǎng)h除大段的內(nèi)容。
---- 首先利用編輯命令“vi file”打開文件,然后將光標(biāo)移到需要?jiǎng)h除的行處按Ctrl+G顯示行號(hào),再到結(jié)尾處再按Ctrl+G,顯示文件結(jié)尾的行號(hào)。
---- :23,1045d 假定2次得到的行號(hào)為23和1045,則把這期間的內(nèi)容全刪除,也可以在要?jiǎng)h除的開始行和結(jié)束行中用ma、mb命令標(biāo)記,然后利用“:a,bd”命令刪除。
---- 4.在整個(gè)文件的各行或某幾行的行首或行尾加一些字符串。
---- vi file
---- :3,$s/^/some string / 在文件的第一行至最后一行的行首插入“some string”。
---- :%s/$/some string/g 在整個(gè)文件每一行的行尾添加“some string”。
---- :%s/string1/string2/g 在整個(gè)文件中替換“string1”成“string2”。
---- :3,7s/string1/string2/ 僅替換文件中的第3行到第7行中的“string1”成“string2”。
---- 注意: 其中s為substitute,%表示所有行,g表示global。
---- 5.同時(shí)編輯2個(gè)文件,拷貝一個(gè)文件中的文本并粘貼到另一個(gè)文件中。
---- vi file1 file2
---- yy 在文件1的光標(biāo)處拷貝所在行
---- :n 切換到文件2 (n=next)
---- p 在文件2的光標(biāo)所在處粘貼所拷貝的行
---- :n 切換回文件1
---- 6.替換文件中的路徑。
---- 使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路徑/usr/bin換成/bin。也可以使用命令“:%s//usr/bin//bin/g”實(shí)現(xiàn),其中“”是轉(zhuǎn)義字符,表明其后的“/”字符是具有實(shí)際意義的字符,不是分隔符。