sed行編輯器與vim編輯器

一、sed行編輯器

  1、簡介:sed的本身也是一個管道命令,可以分析標準輸入,還可以將數據進行替換、刪除、新增、選取特定行的功能

  2、工作原理:sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”( pattern space),接著用sed命令處理緩沖區中的內容 ,處理完成后,把緩沖區的內容送往屏幕。接著處理下一 行,這樣不斷重復,直到文件末尾。文件內容并沒有改變 ,除非你使用重定向存儲輸出。Sed主要用來自動編輯一 個或多個文件,簡化對文件的反復操作,編寫轉換程序。

1.png

  3、用法: sed [option]… 'script' inputfile…

常用選項:

    -n:不輸出模式空間內容的自動打印

    -e: 多點編輯

    -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本

    -r: 支持使用擴展正則表達式

    -i: 原處編輯

  4、地址定界:

  (1) 不給地址:對全文進行處理

  (2) 單地址:

        #: 指定的行

        /pattern/:被此處模式所能夠匹配到的每一行

  (3) 地址范圍:

        #,#

        #,+#

        /pat1/,/pat2/

        #,/pat1/

  (4) ~:步進

        1~2 奇數行

        2~2 偶數行

  5、編輯命令:

        d: 刪除模式空間匹配的行

        p: 顯示模式空間中的內容

        a \text:在行后面追加文本;支持使用\n實現多行追加

        i \text:在行前面插入文本;支持使用\n實現多行插入

        c \text:替換行為單行或多行文本

        w /path/to/somefile: 保存模式匹配的行至指定文件

        r /path/from/somefile:讀取指定文件的文本至模式空 間中匹配到的行后

        =: 為模式空間中的行打印行號

        !:模式空間中匹配行取反處理

綜合示例

2.png

  在這里我創建了一個有10行的文件,用sed結合刪除命令與地址范圍刪除了2-5行,但是如果刪除第2行到最后1行怎么辦。

我們可以這樣

3.png

那如何在文本中的行后追加或插入內容

追加

4.png

6、查找替換功能

  s///:查找替換,支持使用其它分隔符,s@@@,s###

  使用方法sed ‘s/要被替換的字符串/新的字符串/g’

  替換標記:

    g: 行內全局替換 (全局替換就是一整行所有的指定字符串都替換)

  如:

    在這里要注意的是我們替換的是222所以222為一組替換為111最后只剩下22并不能成為一組。

5.png

    p: 顯示替換成功的行

    w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

7、高級編輯命令:

        h: 把模式空間中的內容覆蓋至保持空間中

        H:把模式空間中的內容追加至保持空間中

        g: 從保持空間取出數據覆蓋至模式空間

        G:從保持空間取出內容追加至模式空間

        x: 把模式空間中的內容與保持空間中的內容進行互換

        n: 讀取匹配到的行的下一行覆蓋至模式空間

        N:追加匹配到的行的下一行至模式空間

        d: 刪除模式空間中的行

        D:刪除當前模式空間開端至\n的內容(不在傳至標準輸 出),放棄之后的命令,但是對剩余模式空間重新執行sed

二、vim編輯器

1、簡介

vim可以看做是vi的增強版,它大體上有三種模式,分別是命令模式、編輯模式、擴展命令模式。

  • 命令模式:直接以vim打開一個文件默認情況下進入的模式就是命令模式,在這個模式中可以用上下左右來移動光標,或者執行刪除復制粘貼等命令。

  • 編輯模式:在這個模式下,就可以編輯文件的具體內容,但是需要按下一些特殊按鍵才可以進入這個模式。

  • 擴展命令模式:在最下面一行可以輸入命令進行許多操作。

以上三個模式的關系如下圖。

blob.png

示例,創建一個叫zzzz.txt的文件內容為ABC保存并退出

blob.png

創建文件進入命令模式按a進入編輯模式輸入ABC按ESC退出編輯模式按:進入擴展命令模式輸入wq(保存并退出)。

blob.png

  • 除了上面簡單的幾個小命令vim還有大量的命令與快捷鍵,那就讓我們看一下下面的一張表把。

移動光標
h ← 光標向左移動一個字符
j ↓ 光標向下移動一個字符
k ↑ 光標向上移動一個字符
l → 光標向右移動一個字符
如果想多次移動只需要在前面加上數字如想要向左移動10個字符就在鍵盤上輸入10在按h
Ctrl+f 屏幕向下移動一頁(相當Pg Up)
Ctrl+b 屏幕向上移動一頁(相當Pg Dn)
Ctrl+d 屏幕向下移動半頁
Ctrl+u 屏幕向上移動半頁
+ 光標移動到非空格符的下一行
光標移動到非空格符的上一行
N[space] 如10[space]光標回向后移動20個字符距離
0或[home] 移動到這一行的最前面字符處
$或[end] 移動到這一行的結尾處
H 移動到頁首的第一個字符處
M 移動到頁中的第一個字符處
L 移動到頁尾的第一個字符處
G 移動到這個文件的最后一行
nG 移動到這個文件的第n行
gg 移動到這個文件的第一行
N[Enter] 向下移動n行

(:光標移動至所在處上一句
):光標移動至所在處下一句
{
}
{:光標移動至所在處上一段
}:光標移動至所在處下一段
查找與替換
/word 向下尋找名稱為word的字符串
?word 向上尋找名稱為word的字符串
n 重復前一個查找操作
N 反向進行前一個查找操作
刪除、復制、粘貼
x,X x向后刪除一個字符X向前刪除一個字符
nx 連續向后刪除n個字符
dd 刪除光標所在的一行
ndd 光標所在行向下刪除n行
d1G 刪除光標所在第一行的數據
dG 刪除光標處到最后一行的所有數據
d$ 刪除光標處到該行的最后一個字符
d0 刪除光標處到該行最前面的字符
yy 復制光標所在的一行
nyy 復制光標所在向下的n行
y1g 復制光標所在行到第一行的所有數據
yG 復制光標所在行到最后一行的所有數據
y0 復制光標所在的那個字符到該行行首的所有數據
y$ 復制光標所在的那個字符到該行行尾的所有數據
p.P p將以復制的數據在光標下一行粘貼,P將以復制的數據在光標上一行粘貼
J 將光標所在行與下一行的數據結合成同一行
c 重復刪除多個數據
u 復原前一個操作
Ctrl+r 重做上一個操作
. 重復前一個操作
進入編輯模式
I,i I:從目前光標所在處插入I:從目前所在行的第一個非空格符進行插入。
A,a a:從目前光標所在的下一個字符插入A:從光標所在行的最后一個字付出開始插入
O,o o:從目前光標所在的下一行處插入新的一行O:在目前光標所在處的上一行插入新的一行
R,r r:指揮替換光標所在的那一個字符一次R:一直替換光標所在的文字,直到按下ESC鍵為止
ESC 退出編輯模式
保存、離開等命令
:w 將編輯的數據寫入文件中
:w! 強制寫入到文件中
:q 離開vim
:q! 強制離開不保存
:wq 保存并退出
ZZ 保存并退出
ZQ 不保存退出
:w[name] 將修改過的數據保存到另一個文件中(另存為)
:r[name] 在編輯的數據中,讀入另一個文件
:n1,n2w[name] 將n1n2文件保存成name這個文件
:!command 暫時離開vim執行命令
:set nu 顯示行號
:set nonu 取消行號
多文件編輯按鍵
:n 編輯下一個文件
:N 編輯上一個文件
:files 列出目前這個vim打開的所有文件

怎么樣vim快捷鍵與小命令是不是超級多所以我們需要大量的練習來熟練他,下面我們就來里聯系一個實例:

    1、復制etc下的passwd文件到testdir下改名為xx。

    blob.png

    2、使用vim命令打開它。

    blob.png

    3、在vim中設置一下行號。

    blob.png

    4、光標移動到第5行,向右移動10個字符。

    輸入5按下g再輸入10按下→

     blob.png

     5、將1到20行的nologin改為bash。

    輸入: 在命令行模式下輸入 1,15s\nologin\bash\

    blob.png

     6、修改完后復原。

      直接按U

    blob.png

     7、復制5-10行的內容粘貼到最底下。

    按5G光標會跳至到第5行再按下5y會顯示復制5行按下G跳至文件尾按下p粘貼

    blob.png

     blob.png

     blob.png

     8、將文件另存為一個叫hhl的文件。

     輸入:在命令行模式下輸入w hhl

    blob.png

     9、在第一行新增一行,內容為,I am superman。

    先輸入1G去到第一行,按下大寫O新增一行且再插入模式下,輸入I am superman

    blob.png

    blob.png

    10、保存并退出

    按下esc退出編輯模式按下:進入命令行模式輸入wq按下回車。

    blob.png

vim是vi的加強版所以在vim上面有什么新添加的功能呢,以下列出。

2、vim新的特性

1、著色顯示

  • 對系統規劃的配置文件進行語法檢驗,對特殊內容進行著色。

  • 最下面一行的左邊顯示文件的屬性。

  • 最下面右邊表示光標所在的行與字符數。

如:

blob.png

2、塊選擇功能

在工作環境經中,我們有的時候可能需要提取出一個文件中的一列那塊選擇功能就能很好的幫助我們了。


塊選擇按鍵
v 字符選擇,會將光標經過的地方選擇
V 行選擇,或將光標經過的行選擇
Ctrl+v 塊選擇,用長方形的方式選擇數據
y 將選擇塊復制
d 將選擇的塊刪除

如果我們只需要該文件種bbbbbb的那一列該怎么辦。

blob.png

將光標移到最上行第一個b上然后按下Ctrl+v,左下角出現塊示意圖,然后將光標移至最底部此時光標經過的區域會反白,意為被選擇。

blob.png

這是進行復制粘貼就可以取出來了。

3、多窗口功能

假如有一個文件特別大,我們需要同事看文件的兩個部分那么多窗口功能就可以幫助我們解決這個問題

多文件分割
Vim-o|-O 1 2 打開兩個文件顯示在兩個窗口
o:水平分割O:垂直分割
Ctrl+w,j
Ctrl+w,↓
按住ctrl+w松開后按j或向下移動到向下的窗口
Ctrl+w,k
Ctrl+w+,↑
按住ctrl+w松開后按k或向上移動到向上的窗口
單文件分割
Ctrl+w,s 水平分割
Ctrl+w,v 垂直分割
Ctrl+w,q 取消相鄰窗口
Ctrl+w,o 取消全部窗口
:wqall 退出


blob.png

4、定制vim的工作特性

配置文件:永久有效

    全局:/etc/vimrc

    個人:~/.vimrc

擴展模式:當前vim進程有效

(1) 行號

    顯示:set number, 簡寫為set nu

    取消顯示:set nonumber, 簡寫為set nonu

(2) 括號成對匹配

    匹配:set showmatch, 簡寫為set sm

    取消:set nosm

(3) 自動縮進 啟用:set ai 禁用:set noai

(4) 高亮搜索 啟用:set hlsearch 禁用:set nohlsearch

(5) 語法高亮 啟用:syntax on 禁用:syntax off ?

(6) 忽略字符的大小寫 啟用:set ic 不忽略:set noic

(7) 文件格式

    啟用:fileformat=unix

    不忽略: fileformat=dos

(8) 設置文本寬度

    :set textwidth=65 (vim only)

    :set wrapmargin=15

    :help option-list

    :set or :set all

5、寄存器

  • 有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。

  • 用a,b,…,z表示,用“寄存器表示,放在數字和命令之間 

  如:3"tyy 表示復制3行到t寄存器中 

     "tp 表示將t寄存器內容粘貼

  • 未指定,將使用無命名寄存器

  • 有10個數字寄存器,用0,1,…,9表示,0存放最近復 制內容,1存放最近刪除內容。當新的文本變更和刪除 時,1轉存到2,2轉存到3,以此類推。數字寄存器不能 在不同會話間共享。 vim的寄存器

6、編輯二進制文件

  • ? 以二進制方式打開文件 vim –b binaryfile

  • ? 擴展命令模式下,利用xxd命令轉換為可讀的十六進制 :%!xxd

  • ? 編輯二進制文件

  • ? 擴展命令模式下,利用xxd命令轉換回二進制 :%!xxd –r

  • ? 保存退出


原創文章,作者:502795641,如若轉載,請注明出處:http://www.www58058.com/32721

(0)
502795641502795641
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相關推薦

  • linux用戶組和權限管理

    用戶組和權限管理  概念 用戶分為三類: 1、超級用戶:root uid=0,簡單來說uid為0的用戶就是超級用戶。 2、虛擬用戶:存在linux中,滿足文件或者程序運行的需要,而創建的。不能登錄,不能使用。uid=1-499,1-999(centos7) 3、普通用戶:管理員root創建的用戶。uid=500+,1000+(centos7) 用戶…

    Linux干貨 2017-07-29
  • 馬哥教育網絡班22期+第5周課程練習 忍者亂太郎喻成

    1、顯示當前系統上root、fedora或user1用戶的默認shell;   以root為例 awk -F':' '$1 ~ /root/ {print $7} ' /etc/passwd 2、找出/etc/rc.d/…

    Linux干貨 2016-10-09
  • 淺談bash shell 變量

    一、簡述 變量是指內存空間的命名,指向內存中一個或一組地址。bash shell中的變量屬于弱類型變量,使用變量無需聲明、不需要指定類型,默認為字符型變量。 二、變量命名、賦值、引用 (1)命名規則:     1.只能使用字母,數字,下劃線;并且不能使用數字開頭。     2.不…

    Linux干貨 2016-08-15
  • 給linux系統添加新的磁盤

    虛擬化環境中,我們經常會遇到需要增加磁盤容量的情況,通常有兩種方式,第一種是添加一塊新的硬盤,另一種是擴容原有磁盤,以下是添加新磁盤至linux系統的操作規范。注:具體磁盤信息可能有所不同。 ##查看新增加磁盤/dev/sdb的信息 [root@CentOS7 ~]# fdisk -l /dev/sdb   Disk /dev/sdb: 5368 …

    Linux干貨 2016-11-11
  • 億級用戶下的新浪微博平臺架構

    序言     新浪微博在2014年3月公布的月活躍用戶(MAU)已經達到1.43億,2014年新年第一分鐘發送的微博達808298條,如此巨大的用戶規模和業務量,需要高可用(HA)、高并發訪問、低延時的強大后臺系統支撐。 微博平臺第一代架構為LAMP架構,數據庫使用的是MyIsam,后臺用的是php,緩存為Memcache。 隨著應用規模…

    2015-03-16
  • 軟鏈接和硬鏈接的區別

    Linux鏈接概念 Linux鏈接分兩種,一種被稱為硬鏈接(Hard Link),另一種被稱為符號鏈接(Symbolic Link)。 硬鏈接 硬連接指通過索引節點來進行連接。在Linux的文件系統中,保存在磁盤分區中的文件不管是什么類型都給它分配一個編號,稱為索引節點號(Inode Index)。在Linux中,多個文件名指向同一索引節點是存在的。一般這種…

    Linux干貨 2016-10-29
欧美性久久久久