sed 用法

sed緩衝區
sed 處理文件時,會把文件的每一行保存在一個臨時緩衝區,即模式空間。
sed處理完一行後,該模式空間就被清空,下一行等待處理。因此可把模式空間內容用命令h複製並
保存在一個暫存緩衝區(holding buffer)內,然後可用命令G把它從暫存緩衝區讀出一行,並放回模式空間緩衝區,
追加在模式空間內當前行的後面。
1. sed '/north/p' datafile
缺省情況下,sed會把輸入的所有行都打印在標準輸出上;如果某行匹配了north,則sed將該行再打印一遍。

2. sed -n '/north/p' datafile
只打印匹配north的行.

3.刪除d
sed '3d' datafile   刪除第3行
sed '3,$d' datafile 刪除從第3行到結束
sed '$d' datafile 刪除最後一行
sed '/north/d' file 刪除匹配north的行

4.替換命令s
sed 's/west/north/g' datafile 全局替換
sed 's/[0-9][0-9]$/&.5/g' datafile
所有以兩位數字結尾的行,後面加上.5(點5)

sed -n 's/\(Mar\)got/\1lianne/p' datafile
Mar作爲標籤1,將Margot 替換成Marianne

sed 's#3#88#g' datafile等價於 sed 's/3/88/g' datafile

指定行範圍:逗號
sed -n '/west/,/east/p' datafile 指定在模式west和east之間的行,打印
sed -n '5,/^northeast/p' datafile 打印從第5行到第一個以northeast開頭的行之間的所有行
sed '/west/,/east/s/$/**VACA**/' datafile修改從模式east和west之間的所有行,並將行尾$替換成**VACA**

多重編輯e
sed -e '1,3d' -e 's/Mike/Jones/' datafile
刪除1到3行,然後再替換Mike爲Jones(先全部執行完第一重編輯,再進行第二重編輯)

讀入r
sed '/suan/r newfile' datafile
如果文件datafile中某一行匹配到模式suan,則在該行後讀入newfile的內容。

寫文件w
sed -n '/north/w newfile' datafile
如果文件datafile中某一行匹配到模式north,則把該行寫入newfile文件中

追加
sed '/^north /a\\
----->THE NORTH SALES<------

插入
sed '/eastern/i\\
NEW ENGLAND REGION\\
----------------' datafile
下一行命令n
sed '/eastern/{n;s/AM/Archie/;}' datafile
如果某一行匹配到模式eastern, 命令n指示sed用下一輸入行,即包含AM的那一行,
替換模式空間中的當前行,並用Archie替換AM,然後打印該行,再繼續向下處理

轉換y
sed '1,3y/abcdef/ABCDEF/' datafile
 把第1到3行中abcedf字母轉換成大寫字母

退出q
sed '5q' datafile打印5行後退出
sed '/Lewis/{s/Lewid/Joseph/;q;} datafile
 某行匹配到Lewis時,先用Joseph替換Lewis,然後立即退出

暫存和取用(h和g命令)
sed -e '/WE/{h;d;}' -e '/CT/{G;}' datafile
找到某一行匹配模式WE,用命令h將該行從模式緩衝區拷貝到一個暫存緩衝區,再用命令d把
該模式空間緩衝區那份拷貝刪除。找到模式CT後,再用G命令取出保存在暫存緩衝區中的副本,
用其替換模式空間當前行。

暫存和互換命令x
sed -e '/Patricia/h' -e '/Margot/x' datafile
x命令將暫存區的內容和模式空間內的當前行互換
sed腳本編程:把sed組成一個文本文件,執行腳本時,sed 先將輸入文件中第一行拷貝到模式緩衝區
,然後執行腳本中的所有命令;每行處理完畢後,sed再拷貝文件中下一行到模式緩衝區,
執行腳本中的所有命令。
如:
/Lewis/a\
     Lewis is TOP salesperson for April!!!\
     Lewis is moving to the southern district next month.\
/Margot/c\
    ********************
    MARGOT HAS RETIRED\
    ********************
/i\
   mployer database\
   _________________

$d

%sed -f filename datafile
sed -n '/sentimeatal/p' filename
sed '1,3d' filename > newfile
sed '/[Dd]aniel/d' filename
sed -n '15,20p' filename
sed '/1,10s/Montana/MT/g' filename
sed '/March/!d' filename
sed '/March/\!d' filename
sed 's/\([Oo]cuur\)ence/\1rence' file
sed '/^....//' file
刪除每行前4個字符
sed '/....$//' file刪除每行後4個字符
sed '/east/,/west/s/North/South/' filename
把從east到west範圍內出現的第一個North替換成South,只一次


sed 用法

sed 's/%//g' 把%換成空格

sed 's/^0*//g' 把以0開頭的數字換成空格

sed /^$/d  刪除空行

sed $d 刪除最後一行

sed ld 刪除第一行

sed 's/[0-9][0-9]*/& password/g' file.txt   把password連接到
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章