文本處理工具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
下一篇 2016-08-11

相關推薦

  • 基于Keepalived實現LVS雙主高可用集群

    前言 前面說過基于heartbeat的LVS高可用方案,今天帶來另一種解決方案:基于Keepalived實現LVS雙主高可用集群。什么是Keepalived呢,keepalived觀其名可知,保持存活,在網絡里面就是保持在線了, 也就是所謂的高可用或熱備,用來防止單點故障的發生。本文將詳細講述Keepalived工作原理及高可用解決方案的實現。 相關介紹 K…

    Linux干貨 2015-06-16
  • liunx初探

    計算機的五大單元: 輸出單元、輸入單元、cpu內部控制單元、算術邏輯單元和內存。 計算機三大組成部分: 輸入單元:鍵盤、鼠標等等 輸出單元:屏幕、打印機等 中央處理器(CPU):含有算術邏輯、控制、記憶等 CPU種類有兩種分別是:   精簡指令集(RISC):這種cpu微指令比較精簡,每個指令的執行時間都很短,完成的操作也很簡單。常見的簡單指令集C…

    Linux干貨 2016-09-14
  • 文本處理三劍客之Sed(行編輯器)

    sed(流編輯器,行編輯器)     是一種流編輯器,一次處理一行內容,處理時把當前處理的行存儲在臨時緩存中,成為“模式空間”,接著用sed命令處理緩沖區的內容,處理完畢后吧緩沖區內容輸出到屏幕接著處理下一行。這樣不斷重復到末尾。文件內容并沒有改變。除非使用重定向輸出才會改變內容。 sed:行編輯器(全屏編輯器:vi)   &n…

    Linux干貨 2016-08-15
  • Linux發展及簡單命令

    一 計算機的組成及其功能 馮·諾依曼提出的計算機體系結構:計算機由控制器、運算器、存儲器、輸入設備、輸出設備五部分組成。 二?Linux的發行版 Linux發行版主要有三個分支:Debian、Slackware、Redhat。 (1)Debian:(以社區的方式運作) Ubuntu:基于Debian開發的開源Linux操作系統,主要針對桌面和服務器; Lin…

    2018-03-02
  • 倒排索引-搜索引擎的基石

    1.概述       在關系數據庫系統里,索引是檢索數據最有效率的方式,。但對于搜索引起,他它并不能滿足其特殊要求:       1)海量數據:搜索引擎面對的是海量數據,像Google,百度這樣大型的商業搜索引擎索引都是億級甚至幾千的網頁數量 ,面對…

    Linux干貨 2015-12-10
  • 從零開始搭建雙主模型的nginx proxy高可用集群

    實驗簡介 本文主要介紹雙主模型的nginx proxy高可用集群的搭建方式。實驗環境: 使用nfs/ftp服務器,nfs提供頁面數據共享,ftp提供程序下載 使用單獨的mariadb服務器提供關系型數據庫 使用兩臺httpd服務器提供頁面服務,包括靜態的html和動態的php(phpmyadmin、wordpress、phpinfo) 使用兩臺nginx作為…

    Linux干貨 2017-06-25

評論列表(1條)

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

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

欧美性久久久久