linux中sed命令的使用


sed命令是linux或者shell編程中常用的篩選、替換命令,如果能熟練使用sed則對經常使用的人來說在工作上是非常有幫助的

 

下面把sed主要的用法列出來(有錯誤的地方大家可以指正):

p命令
只打印第三行,沒有-n會在第三行后多打印第三行:
sed -n '3p' filename


只打印最后一行:
sed -n '$p' filename


只打印10到20行(包括10和20行,若后面數字小於前面數字,則只打印前面數字的行):
sed -n '10,20p' filename


打印包含My在行尾的行到包含You的行:
sed -n '/My$/,/You/p' filename


打印匹配行和接着的5行:
sed -n '/My/,+5p' datafile


打印匹配行和下面行號為5的行,直到結尾:
sed -n '/My/,~5p' datafile


打印5倍數的行:
sed -n '0~5p' file
sed '0~5!d' file

----------------------------------------------------------

P命令
打印模式空間中第一個換行符前的內容

其實就是打印單數行

---------------------------------------------------------

d命令
刪除第五行並打印其他行:
sed '5d' filename
刪除包含My的行到包含You的行,不打印:
sed -n '/My/,/You/d' filename
刪除包含My的行到第八行,不打印其他行:
sed -n '/My/,8d' filename

---------------------------------------------------------
D命令
刪除模式空間中第一個換行符前的內容

其實就是打印雙數行

---------------------------------------------------------

s命令
一個字符串替換另一個
sed 's/^My/You/g' datafile
g表示行內全局替換,也可用數值代替
3g表示從第三個匹配到的開始全局替換


sed -n '1,20s#My$#You#gp' datafile
打印1到20行內以My結尾的替換為You的行
注:緊跟s的符號為分隔符,除了換行符反斜杠


sed 's/^My/You/g;s/are/Are/g' datafile
同時替換多個


sed '/ABC/!s/^My/You/g;s/are/Are/g' datafile
替換不包含ABC的行

---------------------------------------------------------

r命令
sed '/^My/r datafile1' datafile2
把datafile1中的所有內容插入到在datafile2中以My開頭的行之后

---------------------------------------------------------

w命令
sed '/^My/w datafile1' datafile2
把在datafile2中以My開頭的行寫入到datafile1中

---------------------------------------------------------

a命令
在查找到的行后追加,有\,則直接跟文本
sed '/My/a\hi,world\nhow are you' datafile
同r命令,只不過是寫入一段文字

---------------------------------------------------------

i命令
當前行的前面插入新的文本
sed '/My/i\hi,world\nhow are you' datafile
用法同a\,只是文本插入到前面

---------------------------------------------------------

c命令
將查到的文本修改成新文本
sed '/My/c\hi,world\nhow are you' datafile
用法同a\和i\

---------------------------------------------------------

N命令
將下一行輸入追加到模式空間以\n分隔
sed '/My/{N;s/My/Your/;}' datafile
若最后一行為奇數行,則N后面命令也不執行

---------------------------------------------------------
n命令
將下一行輸入讀入到模式空間

---------------------------------------------------------

y命令
sed '1,5y/abcd/ABCD/' datafile
把abcd都換成大寫,和s命令一樣/可以換
用法同tr命令

---------------------------------------------------------

q命令
退出命令
sed '/My/{q;s/My/Your/;}' datafile
不會執行s/My/Your/

---------------------------------------------------------

h/H命令和g/G命令
h清除緩沖區內容,保存最近執行h模式內容
H把匹配到內容追加保存在緩沖區
g把緩沖區內容替換掉模式內容
G把緩沖區內容追加到模式空間行后
sed -e '/My/h' -e '$g' datafile
sed -e '/My/H' -e '$G' datafile

g: 將hold space中的內容拷貝到pattern space中,原來pattern space里的內容清除
G: 將hold space中的內容append到pattern space\n后
h: 將pattern space中的內容拷貝到hold space中,原來的hold space里的內容被清除
H: 將pattern space中的內容append到hold space\n后
x: 交換pattern space和hold space的內容

---------------------------------------------------------

x命令
交換保持空間和模式空間的內容

---------------------------------------------------------

l命令
顯示特殊字符,不顯示亂碼
sed -n '1,$l' f1

---------------------------------------------------------

-f參數
sed -n -f script datafile

---------------------------------------------------------

-i參數
直接修改文件,不會打印,如:
sed -i G datafile
把datafile中每行后面加個空行(G)


sed -i 's/^My/You/g' datafile
在文本中直接替換


sed -i '/My/{x;p;x}' datafile
在有My行前面加一空白行


sed -i '$!N;/^\(.*\)\n\1$/!P;D' datafile
刪除相鄰的重復行,只保留第一行

---------------------------------------------------------
-i.bak
修改原始文件並創建原始文件副本
sed -i.bak 's/^My/You/g' datafile
修改datafile並創建一個datafile.bak的備份

---------------------------------------------------------

-e參數
sed命令中進行多重編輯
sed -n -e '/My$/' -e 's/My/You/gp' datafile
先打印以My結尾的行,再執行替換語句

---------------------------------------------------------

=命令
打印行號:
sed -n '=' f1

$=  計算文本行數
sed -n '$=' datafile1 datafile2...

---------------------------------------------------------

$!除了最后一行
4!除了第四行
sed '4! s/My/Your/g' datafile
除了第四行都執行替換

---------------------------------------------------------

b命令
標簽,可以跳轉到標簽執行,如
sed '/^My/byyc;s/^/#/;b;:yyc;s/^My/Your/ datafile
如果是My開頭則換成Your,否則行前加#

---------------------------------------------------------

sed正則表達式
\     不轉義,即元字符照常打印
^    以字符串開頭,如/^My/以My開頭的行
$   以字符串結尾,如/My$/以My結尾的行
.    匹配一字符,如/M..y/M和y間有倆字符
*   匹配0個或多個前面的字符
[]   匹配里面的單字符,如/[Mh]y/匹配My和hy
[^]  匹配不在里面的字符
      如/[^Mh]y/匹配不是My和hy
\(..\) 保存已經匹配的字符,用\n來呼出
     如1,20s/\(you\)self/\1r/用\1呼出you,
    最多保存9個,從左邊開始標記
&    保存查找串,如s/My/you&you/,&表示My
\< 詞首定位符,和^類似,如/\<My/
\> 詞尾定位符,和$類似,如/My\>/
x\{m\} 連續m個x,如/a\{5\}/查找連續5個a
x\{m,\} 至少m個x,如/a\{5,\}/至少5個a
x\{m,n\} 至少m個x,最多n個x
\w   匹配每個字母和數字
\w\+  匹配每一個單詞
\s  匹配每個空格
\x\+  x表示一個字符or一個單詞,當匹配到一個或者多個時操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM