shell-sed

sed     stream   edit  非交互式 對文件做編輯的工具

語法格式
sed   [選項]  '動作'   文件列表
sed   [選項]  '條件動作'   文件列表

以行爲處理單位  一次處理一行  逐行處理
默認把處理結果輸出到屏幕

+++++++++++++++++++++++++++++++++++++++++++++++

選項:

-n    #屏蔽默認輸出

-i  直接修改文件內容

-f 使用sed腳本

+++++++++++++++++++++++++

vim  test.sed

s/haha/xixi
s/[0-9]//g
........

:wq

sed  -f   test.txt    a.txt     

+++++++++++++++++++++++++
-e 可指定多個處理動作

-r  啓用擴展的正則表達式,若與其他選項一起用應作爲首個選項

{}  可組合多個命令,以分號分隔

處理動作:

p打印行

2,4p  輸出第234行

2p;4p 輸出第2和第4行

d刪除行 (刪除一行)

2,4d 刪除第234行

s 字符串替換

s/old/new  將每行的第一個old替換爲new

s/old/new/3  將每行的第3個old替換爲new

s/old/new/g  將所有的old替換爲new

++++++++++++++++++++++++++++++++++++++++++++ 

p打印行
 sed 'p' a.txt               輸出所有行不屏蔽默認輸出(出現兩遍內容)
 sed -n  'p' a.txt            輸出所有行 sed -n  '3p' a.txt
 cat -b a.txt 
 sed  -n '3p' a.txt            輸出第三行
 sed  -n '3,5p' a.txt           輸出345行
 sed  -n '$p' a.txt               輸出最後一行
 sed  -n '1p;5p;$p' a.txt      輸出1,5,和最後一行
 sed  -n '/^r/p' a.txt      輸出以r開頭的行
 sed  -n '/h$/p' a.txt     輸出以h結尾的行
 sed  -n '/h/p' a.txt         輸出帶h的行

sed -n 'p;p;p' a.txt        把每行內容輸出3次

 sed -n '3,+10p'  a.txt  輸出第3行及其後10行的內容

sed -n  'p;n' a.txt       輸出奇數行,n表示讀入下一行文本(隔行)

sed -n 'n;p' a.txt       輸出偶數行,n表示讀入下一行文本(隔行)

sed  -n  '$='   a.txt            輸出文件的行數

sed -n  '10,${n;p}' a.txt   輸出第10行到最後一行所有的偶數行

---------------------------------------------------------------------
d刪除行 (刪除一行)  不帶-i不修改原文件

 sed  '1d'  a.txt    刪除第一行
 sed  '$d'  a.txt    刪除最後一行
sed  '1,3d'  a.txt   刪除第123行
sed  '/r/d'   a.txt  刪除包含r的行

sed '/r/!d' a.txt    刪除不包含r的行

sed '/^r/d' a.txt    刪除以r開頭的行

sed   '/^$/d'  a.txt   刪除所有空行

sed  '/^$/{n;/^$/d}'   刪除重複空行,連續兩個空行只保留一個

 sed  '/^[rds]/d' a.txt   刪除分別以r,d,s開頭的行
 sed  -i   '$d' /etc/passwd  刪除文件的最後一行,修改原文件
----------------------------------------------------------------------
a/i添加行  (添加一行)
a  在當前行下方添加新行
i   在當前行上方添加新行

sed   'a內容'  a.txt

  echo cccccccccccc > a.txt
   sed  'aFFFFFFFFF' a.txt    在沒行的下方添加內容FFFF...
   sed  'iFFFFFFFFF' a.txt   在沒行的上方添加內容FFFF...
   echo 11111111 >> a.txt
   sed  '$aFFFFFFFFF' a.txt   在最後一行的下方添加
 sed  '1aFFFFFFFFF' a.txt   在第一行添加
  echo  ccccccccccc >> a.txt
 sed  '/^c/aFFFFFFFFF' a.txt     在以c開頭的行添加
  sed  -i '/^c/aFFFFFFFFF' a.txt  在以c開頭的行添加,修改原文件

 sed  -i '$ayzs:x:2001:2001:tea:/home/yzs:/bin/bash' /etc/passwd  在最後一行的上邊添加內容

sed '1,3aF' a.txt    在第123行的上邊添加
sed  -e 'aF' -e 'aX' -e 'aW' a.txt  在每行的上邊分別都添加FXW,都隔行
--------------------------------------------------------------------
c替換行   (以行爲替換單位)
sed   'c內容'   a.txt
sed   '條件c內容'   a.txt
  sed  'cPLJ' a.txt      把每行替換成PLJ
  sed  '1cPLJ' a.txt    把第一行替換成PLJ
 sed  '2,5cPLJ' a.txt  把第2345行替換成PLJ
 sed  -e '2cPLJ' -e '3cPLJ' a.txt   指定多個處理動作替換
 sed  -i  '/^a/cT' a.txt   把以a開頭的行替換成T  -i處理原文件
--------------------------------------------------------------------
sed   's/aa/bb/'  a.txt  將每行的第一個aa 替換成bb

sed 's/aa/bb/3' a.txt 將每行的第3個aa 替換成bb

sed 's/aa/bb/g' a.txt 將所有的aa 替換成bb

sed 's/aa//g' a.txt 將所有的aa刪除

sed 's/aa/&s/g' a.txt    將所有的aa 替換成aabb,&代表前邊的查找串

sed  '4,7s/^/#/g'  a.txt 將第4-7行註釋掉

sed   's/^an#/an/'  a.txt  去除以an開頭行的注視

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

導入導出操作

 r  讀取文件  :

3r b.txt 在第3行文件下方插入文件b.txt

sed  '3r b.txt'   a.txt

4,7r b.txt   在第4-7行每一行的下方插入文件b.txt

sed   '4,7r b.txt'   a.txt

w 保存到文件:

3w c.txt   將第3行另存到文件c.txt

sed   '3w c.txt'  a.txt

4,7w c.txt  將第4-7行另存到文件c.txt

sed    '4,7w c.txt'  a.txt

 

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

sed  複製剪切

基本動作

複製:   H:模式空間--追加--保持空間

               h:模式空間--覆蓋--保持空間

粘貼:  G:保持空間--追加--模式空間

              g:保持空間--覆蓋--模式空間

複製把文件1-2行復制到文件的末尾
sed  -n  '1h;2H;p'  a.txt

剪切
把文件1-2行剪切到文件的末尾
sed  '1h;2H;1,2d;$G' a.txt

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

後向引用   (-r  表示轉義)
保存替換時的源數據,在替換時使用源數據做替換。最多用9個()
()()()()()()()()()
\1\2..............\9

    sed -r  '1s/(^.)(.*)/\1/' a.txt   把第一行替換成第一行的第一個字母
    sed -r  's/(^.)(.*)/\1/' a.txt      把所有行替換成每一行的第一個字母    
    sed -r  's/(^.)(.*)/\2/' a.txt       把每一行第一個字符去掉

    sed -r  '1s/(^.)(.*)(.$)/\3\2\1/' a.txt  把第一行第一個字符和最後一個字符對調

    sed -r  '1s/(^.)(.*)(.$)/\2/' a.txt     把第一行的第一個字符和最後一個字符去掉
    sed -r  '1s/(^.)(.*)(.$)/\1\3/' a.txt     只保留第一行的第一個字符和最後一個字符
    sed -r  '1s/(^.)(.*)(.$)/\1abc\3/' a.txt   把第一行第一個字符和最後一個字符保留並且中間加字母abc
    sed -r  's/(^.)(.*)(.$)/\1abc\3/' a.txt  把第每行的第一個字符和最後一個字符保留並且中間加字母abc    
    sed -r  's/(^.)(.*)(.$)/\2\3/' a.txt    把每行的第一個字符去掉

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&  保存替換時的源數據
sed -r 's/^./[&]/' a.txt   把每行的第一個字符用[ ]擴起來

 sed '2s/lisi/&user/'  a.txt   把第二行的lisi後面加上字母user
 sed '2s/lisi/[&]/'  a.txt     把第二行的lisi用[ ]擴起來

                     

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章