文本處理工具sed的使用以及Vim的使用技巧詳解

一、什么是sed
    sed的英文全稱是Stream EDitor,叫行編輯器。
    sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。 Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等。
二、sed的使用
    sed工具
    用法:
    sed [option]... 'script' inputfile...
? 常用選項:
    -n:不輸出模式空間內容的自動打印
    -e: 多點編輯
    -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
    -r: 支持使用擴展正則表達式
    -i: 原處編輯
? script:
    '地址命令'
地址定界:
    (1) 不給地址:對全文進行處理
    (2) 單地址:
        #: 指定的行
        /pattern/:被此處模式所能夠匹配到的每一行
    (3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
    (4) ~:步進
        1~2 奇數行
        2~2 偶數行
[root@wzc ~]# sed -n '2p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
#打印某行,單引號內數字2,表示第幾行
[root@wzc ~]# sed -n '1,$p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
                  .....
#把/etc/passwd所有行打印出來
[root@wzc ~]# sed -n '1,3p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
#也可以指定一個范圍
[root@wzc ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#打印包含某個字符串的行
[root@wzc date]# sed -ne '2p' -e '/root/p' passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
#-e選項可以實現多點編輯
編輯命令:
    d: 刪除模式空間匹配的行
    p: 顯示模式空間中的內容
    a \text:在行后面追加文本;支持使用\n實現多行追加
    i \text:在行前面插入文本;支持使用\n實現多行插入
    c \text:替換行為單行或多行文本
    w /path/to/somefile: 保存模式匹配的行至指定文件
    r /path/from/somefile:讀取指定文件的文本至模式空
    間中匹配到的行后
    =: 為模式空間中的行打印行號
    !:模式空間中匹配行取反處
[root@wzc date]# cat -n passwd | sed '3d' 
     1  root:x:0:0:root:/root:/bin/bash
     2  bin:x:1:1:bin:/bin:/sbin/nologin
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#-d選項刪除行,顯示刪除行以外的行
[root@wzc date]# cat -n passwd |sed '1,3d'
     4  adm:x:3:4:adm:/var/adm:/sbin/nologin
     5  lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     6  sync:x:5:0:sync:/sbin:/bin/sync
     7  shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     8  halt:x:7:0:halt:/sbin:/sbin/halt
     9  mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
#-d選項還可以刪除指定范圍的行
cat -n passwd |grep 'root'|sed '/root/d'
#刪除指定的字符串
s///:查找替換,支持使用其它分隔符, s@@@, s###
    替換標記:
        g: 行內全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
[root@wzc ~]# cat test 
root root root
root    root
root root 
[root@wzc ~]# sed 's/root/tot/' test 
tot root root
tot     root
tot root 
[root@wzc ~]# sed 's/root/tot/g' test 
tot tot tot
tot     tot
tot tot 
#‘s’有替換和刪除的意思,加‘g’選項是文本行中全局替換,如果不加‘g’選項只替換每行的第一個字符
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      95      90      90.7
3       longze  85      88      87      86.7
[root@wzc date]# sed '3s/95/100/g' stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
#把第三行Linux成績95替換成100,文件內容實際上Linux成績還是95

[root@wzc date]# sed -i '3s/95/100/g' stu.txt 
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
#-i選項是把數據直接寫入文件
[root@wzc date]# cat stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1       cangls  88      90      95      91
2       boduo   87      100     90      90.7
3       longze  85      88      87      86.7
[root@wzc date]# sed -e 's/cangls//g' -e 's/boduo//g' stu.txt 
ID      Name    PHP     Linux   Mysql   Average
1               88      90      95      91
2               87      100     90      90.7
3       longze  85      88      87      86.7
#-e前面已經講過是可以實現多點編輯,同時把‘cangls’和‘boduo’替換為空

Vim
什么是Vim
    Vim是一個功能強大的全屏幕文本編輯器,是Linux/Unix上最常用的文本編輯器,它的作用是建立、編輯、顯示文本文件。
    Vim的三種模式:命令模式、插入模式、擴展模式。
模式轉換
    命令模式 --> 插入模式
    i: insert, 在光標所在處輸入
    I:在當前光標所在行的行首輸入
    a: append, 在光標所在處后面輸入
    A:在當前光標所在行的行尾輸入
    o: 在當前光標所在行的下方打開一個新行
    O:在當前光標所在行的上方打開一個新行
插入模式 ----> 命令模式
    ESC
命令模式 ----> 擴展模式
    :
擴展模式 ----> 命令模式
    ESC
鎖定和解鎖:CTRL+s,Ctrl+q
關閉文件
擴展模式:
    :q 退出
    :q! 強制退出,丟棄做出的修改
    :wq 保存退出
    :x 保存退出
命令模式
    ZZ: 保存退出
    ZQ:不保存退出

Vim總結(表格)

命令模式下移動光標
h或向左方向鍵 光標向左移動一個字符
l或向右方向鍵 光標向右移動一個字符
j或向下方向鍵 光標向下移動一個字符
k或向上方向鍵 光標向上移動一個字符
Ctrl+f或者page UP鍵 屏幕向前移動一頁
Ctrl+b或者page DOWN鍵 屏幕向后移動一頁
Ctrl+d 屏幕向前移動半頁
Ctrl+u 屏幕向后移動半頁
+ 光標移動到非空格符的下一列
光標移動到非空格符的上一列
N空格(n是數字) 按下數字n然后按空格,則光標向右移動n個字符,如果該行字符數小于n,,則光標繼續從下行開始向右移動,一直到n
數字0或Shift+6 移動到本行行首
Shift+4或$ 移動到本行行尾
H 光標移動到當前屏幕的最頂行
M 光標移動到當前屏幕的中央那一行
L 光標移動到當前屏幕的最底行
G 光標移動到文本的最末行
nG(n是數字) 移動到該文本的最n行
gg 移動到該文本的首行
n回車(n是數字) 光標向下移動n行
$ 移至行尾
0 移至行首

命令模式下查找與替換
/word 向光標之后尋找一個字符串名為word的字符串,當找到第一個word后,按‘n’繼續搜后一個
?word 向光標之后尋找一個字符串名為word的字符串,當找到第一個word后,按‘n’繼續搜前一個
:n1,n2s/word1/word2/g 在n1和n2行間查找word1這個字符串并替換成word2,也可以把‘/’換成‘#’或‘@’
:1,$s/word1/word2/g 從第一行到最末行,查找word1并替換成word2
:1,$s/word1/word2/gc 加上c的作用是,在替換前需要用戶確認

命令模式下刪除、復制、粘貼
x,X X刪除光標所在處字符,X為向前刪除一個字符
nx(n位數字) 向后刪除n個字符
dd 刪除光標所在的那一行
ndd(n位數字) 刪除光標所在行的向下n行
d1G 刪除光標所在的第一行所有數據
dG 刪除光標所在行到末行的所有數據
yy 復制光標所在的那行
nyy 復制從光標所在行起向下n行
p,P p復制的數據從光標下一行粘貼,P則從光標上一行粘貼
y1G 復制光標所在行到第一行的所有數據
yG 復制光標所在行到末行的所有數據
J 將光標所在行與下一行的數據結合成同一行
u 還原過去的操作
D 刪除光標所在處到行尾內容
r 取代光標所在處字符
R 從光標所在處開始替換字符,按ESC結束

進入編輯模式
i 在當前字符前插入字符
I 在當前行行首插入字符
a 在當前字符后插入字符
A 在當前行行尾插入字符
o 在當前行下插入新的一行
O 在當前行上插入新在當前行下插入新的一行的一行
r 替換光標所在的字符,只替換一次
R 一直替換光標所在的字符,一直到按下ESC

擴展模式
:w 將編輯過的文本保
:w! 若文本屬性為只讀時,強制保存
:q 退出Vim
:q! 不管編輯或未編輯都不保存退出
:wq 保存,退出
:e! 將文檔還原成最原始狀態
ZZ 若文檔沒有改動,則不存儲離開,若文檔改動過,則存儲后離開,等同于:wq
:w  [filename] 編輯都的文檔另存為[filename]
:r  [filename] 在當前光標所在行的下面讀入filename文檔的內容
:set nu 在每行的行首顯示行號
:set nonu 取消行號
n1,n2 w [filename] 將n1到n2的內容另存為filename這個文檔
:! command 暫時離開Vim運行某個Linux命令。例如:! ls /home暫時列出/home目錄下的文件1,然后會提示按回車回到Vim

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

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

相關推薦

  • lnmp部署實驗

    Lnmp部署 實驗環境: 1、Centos 7主機一臺,客戶機一臺。 2、在centos 7主機上部署:    Nginx  php-fpm  php-mysql  mariadb-server 實驗步驟: 1、啟動nginx服務,確保80端口打開,啟動mariadb-server,確保3306端口…

    Linux干貨 2016-10-30
  • vim的總結、練習和周期性任務

    vim:VI的增強版,是一款可視化功能非常強大的文本編輯器,屬于全屏編輯器。 vim:使用方法: 命令格式:    ~]#vim [options] [file ..]      選項:        +#:打開文件后,直接讓光標處于第#行首;   …

    Linux干貨 2017-08-14
  • 第二周博客作業

    1.linux上的文件管理類命令都用哪些,其常用的使用方法及其相關示例演示。 常用命令有:cp, mv, rm 復制命令:cp cp [OPTION]… [-T] SOURCE DEST                 cp [OPTION]… SOURC…

    Linux干貨 2016-06-23
  • 第五周作業

    1、顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行; ~]# grep  “^[[:space:]]\{1,\}” /boot/grup/grup.conf                     &…

    2017-03-01
  • shell腳本編程之變量詳解

    什么是變量     變量是計算機內存的單元,其中存放的值可以改變。當Shell腳本需要保存一些信息時,如一個文件名或是一個數字,就把它存放在一個變量中。每個變量有一個名字,所以很容易引用它。 使用變量可以保存有用信息,使系統獲知用戶相關設置,變量也可以用于保存暫時信息。 變量:變量類型 作用:  &…

    Linux干貨 2016-08-15
  • 軟鏈接,硬鏈接區別

    軟硬鏈接涉及文件系統inode, 區分于inode號,硬鏈接inode號與鏈接文件相同,且創建鏈接不占空間.而軟鏈接占名稱字節個空間,且inode號與鏈接文件不同; 兩者查找inode號命令都可查找inode號,命令為ls -i,如需查找本目錄要加d; 在創建鏈接環境上,硬鏈接只能在同分區創建一個,不能跨分區創建;而軟鏈接可以跨分區創建多個鏈接文件且可以多個…

    Linux干貨 2016-10-20

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-12 10:07

    文章結構清晰明了,有理論有操作,很用心哦,

欧美性久久久久