一、什么是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
文章結構清晰明了,有理論有操作,很用心哦,