sed

 

sed

sed 編輯器
sed編輯器被稱做流編輯器(stream editor),和普通的交互式文本編輯器剛好相反。在交互式文本編輯器中(好比vim),你能夠用鍵盤命令來交互式地插入、刪除或替換數據中的文本。流編輯器則會在編輯器處理數據以前基於預先提供的一組規則來編輯數據流。sed編輯器能夠根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中。sed編輯器會執行下列操做

  (1) 一次從輸入中讀取一行數據。
  (2) 根據所提供的編輯器命令匹配數據。
  (3) 按照命令修改流中的數據。
  (4) 將新的數據輸出到STDOUT。正則表達式

   在流編輯器將全部命令與一行數據匹配完畢後,它會讀取下一行數據並重復這個過程。在流編輯器處理完流中的全部數據行後,它就會終止。
 

 

sed命令的格式以下。
sed options script file

 

 

    sed [options] 'command' file(s) 
    sed [options] -f scriptfile file(s)
    
    d :刪除符合條件的行
    p : 顯示符合條件的行
    -n :只顯示符合條件的行,和p 配合使用
    -n或--quiet或——silent:僅顯示script處理後的結果
    s :查找而且替換
    sed '1,2d' /etc/fstab  |wc -l  
    # 刪除指定文件fstab 中的1.2兩行,將模式空間打印在屏幕上

    sed '/oot/d' /etc/fstab  |wc -l
    # 刪除包含 oot 的行
    
    選定行的範圍
     '/字符串/' 
    
    sed ' /^\//d' /etc/fstab  |wc -l   
    #刪除以 / 開頭的行 ,須要用 \ 進行轉義 
    
    sed -n ' /^\//p' /etc/fstab
    #只顯示匹配的行,顯示處理後的結果

------------------------------------------------------------  vim

  sed -e 's/brown/green/; s/dog/cat/' data1.txt數組

  $ sed -e '
  > s/brown/green/
  > s/fox/elephant/
  > s/dog/cat/' data1.txt編輯器

    #使用多個編輯命令ui

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

$ cat script1.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/
$
$ sed -f script1.sed data1.txtspa

#從文件讀取編輯命令命令行

---------------------------------------------
    
    \n    換行符
    
     sed -n ' /^\//a\##################################' /etc/fstab
    #a\string  在當前行下面插入文本。爲在以\ 開頭的行下賣弄插入一行##....
    
    
    sed -n ' /^\//i\##################################' /etc/fstab
    i\string  在當前行上面插入文本。

    sed  ' /^\//i\##################################\n$$$$$$$$$$$$$$$$$$$$$$$' /etc/fstab
    
    r :file 從file中讀行。將指定文件內容添加到符合條件的行處
    w :將指定範圍內的內容另存至指定文件中
    
    sed '/oot/w out_oot.txt' /etc/fstab
    #在fstab 文件中過濾包含oot 的行,w 可以將濾出來的行保存至指定文件夾。
            
    sed 's/oot/OOT/' /etc/fstab     
    # s 替換每行中第一次被模式匹配到的字符串
        修飾符:
        g: 全局替換
     數字:指定的行
sed 's/oot/OOT/g' /etc/fstab i: 查找時忽略大小寫 s 替換能夠使用其餘字符做爲分隔符,如: s@@@ , s### & :引用模式匹配整個串 sed 's@l..e@&r@g' sed_test.txt #查找l..e 的字符串後面加r 字符 ".." 爲模式匹配任意字符 sed 's@l\(..e\)@L\1@g' sed_test.txt 反向引用替換某個單詞中的某個字符 -i :-i 選項直接修改源文件 -e : 能夠同時執行多個腳本 -f : 調用腳本文件處理 列如: sed /path/sed.script file sed '$d' file # 刪除最後一行 sed -i '$d' /etc/fstab # 直接在源文件進行修改,刪除最後一行 history |sed 's@^[[:space:]]@@g' |cut -d ' ' -f1 取出history 的序號,刪除空格 sed 練習: 1. 刪除 /etc/grub.conf 文件中行首的空白字符 sed -r 's@^[[:space:]]+@@g' /etc/grub.conf 2.替換 /etc/inittab 文件中的"id:3:initdefault" 中的數字爲5 sed 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g' /etc/inittab sed -n 's@\(id:\)[0-9]\(:initdefault:\)@\15\2@g'\p /etc/inittab #-n 和p 參數組合使用,只顯示修改的參數 #-n選項和p命令一塊兒使用表示只打印那些發生替換的行 3.刪除 /etc/inittab 中的空白行 sed '/^$/d' /etc/inittab 4.刪除 /etc/inittab 文件中開頭的#號 sed 's@^#@@g' /etc/inittab 5.刪除文件中以# 號開頭的及後面的空白字符,且必須含有空白字符才執行。 sed -r 's@^#[[:space:]]+@@g' /etc/inittab #### -r 參數表示在腳本中使用擴展正則表達式 6.刪除空白字符及# 號開頭的部分 sed -r 's@^[[:space:]]+#@@g' /etc/inittab 7,取出一個文件中的目錄名稱 echo "/etc/rc.d" |sed -r 's@^(/.*/)[^/]+/?@\1@g'

 

sed 進階

多行命令code

 N:將數據流中的下一行加進來建立一個多行組(multiline group)來處理。
 D:刪除多行組中的一行。
 P:打印多行組中的一行

 

單行 next 命令blog

[root@localhost gawk]# cat data1 
test text
123 test

the cost is $4.0

the cost isis $4.0
is cost $4.0
the is cast $4.0
the is cbst $4.0

[root@localhost gawk]# sed  '/123/{n ;d}' data1 #n 命令至關於查詢指定的匹配條件,而後跳到下一行執行命令,而後繼續日後執行      
test text
123 test
the cost is $4.0

the cost isis $4.0
is cost $4.0
the is cast $4.0
the is cbst $4.0

 

 

合併文本行ip

[root@localhost gawk]# cat data1 
test text
123 test
the cost is $4.0

the cost isis $4.0
is cost $4.0
the is cast $4.0
the is cbst $4.0
[root@localhost gawk]# sed '/123/{N ; s/\n/ /}' data1 
test text
123 test the cost is $4.0

the cost isis $4.0
is cost $4.0
the is cast $4.0
the is cbst $4.0
[root@localhost gawk]# 

 

 

排除命令

#使用 ! 來排除匹配的範圍
[root@localhost gawk]# cat data1 test text 123 test the cost is $4.0 the cost isis $4.0 is cost $4.0 the is cast $4.0 the is cbst $4.0 [root@localhost gawk]# sed -n '/123/!p' data1 test text the cost is $4.0 the cost isis $4.0 is cost $4.0 the is cast $4.0 the is cbst $4.0 [root@localhost gawk]#

 

 

在腳本中使用sed

反轉文本數據

[root@localhost gawk]# cat data1 
test text
123 test
the cost is $4.0

the cost isis $4.0
is cost $4.0
the is cast $4.0
the is cbst $4.0
[root@localhost gawk]# ./test3.sh data1 
the is cbst $4.0
the is cast $4.0
is cost $4.0
the cost isis $4.0

the cost is $4.0
123 test
test text
[root@localhost gawk]# 
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息