Spark修煉之道(基礎篇)——Linux大資料開發基礎:第六節:vi、vim編輯器(二)

五柳-先生發表於2015-11-14

本節主要內容

  1. 緩衝區的使用
  2. 檔案的存檔與讀盤
  3. 文字查詢
  4. 文字替換

作者:周志湖 
微訊號:zhouzhihubeyond 
網名:搖擺少年夢

1. 緩衝區的使用

在利用vim進行文字編輯時,編輯修改後的文字不會立即儲存到硬碟上,而是儲存在緩衝區中,如果沒有把緩衝區裡的檔案存檔,原始檔案不會被更改。vim在開啟檔案時將文字內容讀到緩衝區中,在進行文字編輯時,修改的文字儲存在緩衝區,此時硬碟上的原檔案不變。下面讓我們來演示一下緩衝區的使用。 
假設採用vim 同時開啟兩個文字檔案:

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">root@ubuntu:/home/xtwy<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># vim test2.txt test1.txt</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//開啟檔案後,預設開啟的是test2.txt</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//此時我們使用:buffers命令可以看查緩衝區</span><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">
//得到如下結果</span>
:buffers
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> %<span class="hljs-operator" style="box-sizing: border-box;">a</span>   <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test2.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>      <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test1.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

這裡寫圖片描述

<code class="hljs asciidoc has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:buffers命令給出的是當前編輯中所有的緩衝區狀態,前面的數字是緩衝區的數字標記,第二個標記就是緩衝區當前的狀態,緊接著是與緩衝區所關聯的檔名。緩衝區的狀態有以下幾種:

<span class="hljs-bullet" style="box-sizing: border-box;">- </span>(非活動的緩衝區)
a (啟用緩衝區)
h (隱藏的緩衝區)
% (當前的緩衝區)
# (交換緩衝區)
<span class="hljs-header" style="box-sizing: border-box;">= (只讀緩衝區)</span>
+ (已經更改的緩衝區)</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

在命令模式輸入:open test1.txt進入test1.txt編輯介面,然後再輸入:buffers檢視緩衝區狀態,得到如下結果

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:buffers
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">#    "test2.txt"                    line 1</span>
  <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span> %<span class="hljs-operator" style="box-sizing: border-box;">a</span>   <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"test1.txt"</span>                    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

這裡寫圖片描述

可以看到此時test1.txt載入為活動緩衝區,而test2.txt則被載入到交換緩衝區。此時利用:bprevious命令可以切換test2.txt為活動緩衝區,

這裡寫圖片描述 
執行後得到: 
這裡寫圖片描述 
可以看到,此時已經切換回到text2.txt,即將text2.txt載入到當前活動緩衝區當中,採用:buffers命令得到如下結果: 
這裡寫圖片描述

更多緩衝區操作命令如下:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:buffers</span>    電焊工緩衝區狀態
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:buffer</span> 編輯指定緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:ball</span>   編輯所有緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bnext</span>  到下一緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bprevious</span>  到前一緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:blast</span>  到最後一個緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bfirst</span> 到第一個緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:badd</span>   增加緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bdelete</span>    刪除緩衝區
<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:bunload</span>    解除安裝緩衝區</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

2. 檔案的存檔與讀盤

(一)儲存並退出

在編輯模式中,如果文字編輯任務已經完成,想直接儲存退出,返回到Linux CLI命令列的話,直接按ZZ即可。

(二)讀取檔案內容到緩衝區

在編輯模式中,採用:r命令讀取檔案內容到當前緩衝區, 
這裡寫圖片描述 
:r test1.txt可以test1.txt檔案內容寫到緩衝區 
這裡寫圖片描述

(三)將緩衝區內容寫到檔案

在編輯模式中,採用:w命令將修改後的檔案寫到磁碟,也可以使用:wq命令將修改的檔案寫到磁碟上後退出vim返回inux CLI,如果不想儲存直接退出,則使用:q!命令直接退出vim,返回到CLI命令列。

3. 文字查詢

(1)一般搜尋

使用?或/進行字串查詢,例如: 
這裡寫圖片描述 
回車之後,游標將定位到下一個Spark上,如果還想往下搜尋,則按n(next),如果想往上搜尋,則按N

(2)正規表示式搜尋

正規表示式搜尋是指加入了像”^,$,.”等特殊匹配字元,它們的作用如下表:

搜尋字串 搜尋描述 舉例
:/^Spark 搜尋以Spark為開頭的行 Spark is ….
:/YARN$ 搜尋以YARN為結尾的行 …Hadoop YARN
:/Ha…p 搜尋Ha開頭,中間有三個字元且以p結尾的字串 Hadoop、Hadaap
:/e> 查詢以e結尾的字串,其中>符號是字串結束指示符號,這裡\不是轉義字元,而是與>組合到一起,來表示特殊意義 like、source
:/\<Had 查詢以Had作為開始的字串,\< 同樣具有特殊意義 Hadoop、Hadoo
:/Spa* 檢視字串中出現至少一次Spar的字串,\< 同樣具有特殊意義 Spark、SpaSpark
:/Sp[ae]rk 匹配Spark或Sperk Spark、Sperk

4. 文字替換

文字替換使用以下語法格式:

<code class="hljs markdown has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">:[<span class="hljs-link_label" style="box-sizing: border-box;">g</span>][<span class="hljs-link_reference" style="box-sizing: border-box;">address</span>]s/search-string/replace-string[/option]</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

其中address用於指定替換範圍,下表給出的是常用示例:

<code class="hljs perl has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">//將當前緩衝區的第一行中的Downloading替換為Download
: <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Downloading/Download

//將當前緩衝區中的第一行到第五行中的Spark替換為spark
:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark

//將當前緩衝區中的第一行到當前游標所在行的Spark替換為spark
:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>,. <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark

//將當前游標所在行到緩衝區最後一行的Spark替換為spark
:.,$ <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">s</span>/Spark/spark

//將整個緩衝區中的Spark替換為spark
:% <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/Spark/spark

/</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/當前行中第一次搜尋到的Spark替換為spark
: s/</span>Spark/spark

//將當前行中所有的Spark替換為spark
:<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/Spark/spark/g</span>  

//將所有的<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span>轉換成And,不包括theta這種字串,只會作用於the這種單獨存在的字串
:% <span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">s/\<the\>/The/g</span>  
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li></ul>

轉載: http://blog.csdn.net/lovehuangjiaju/article/details/47978493

相關文章