sed?用于篩選和轉換文本的流編輯器
命令格式:sed [OPTION] {script} file
選項
- ? ? ? -n, –quiet, –silent 抑制模式空間的自動打印??
echo -e “abc\ndef” | sed ‘p’ #輸出 abc # abc # def # def echo -e “abc\ndef” | sed -n ‘p’ #輸出 abc # def
?
- -e script, –expression=script 添加腳本到將要被執行的命令
echo -e “abc\ndef” | sed -n -e ‘s/abc/ghi/’ -e ‘p’ # 輸出 ghi # def
- -f script-file, –file=script-file 將腳本文件的內容添加到要執行的命令–follow-symlinks 處理符號鏈接-i[SUFFIX], –in-place[=SUFFIX] 編輯文件(如果提供了SUFFIX ,則對原文件先進行備份) 例如
sed -i_bak ‘1d’ aaa # 將先生成aaa的備份文件aaa_bak
- -l N, –line-length=N 為’l‘命令指定希望的行折疊長度–posix 禁用所有的GNU擴展。-r, –regexp-extended 在腳本中使用擴展的正則表達式。-s, –separate 將文件視為單個獨立的文件,而不是將它們視為整個連續的字符流。-u, –unbuffered 從輸入中加載盡可能少量的數據并且更頻繁的刷新–help 顯示幫助并且退出–version 輸出版本信息并退出
命令0地址命令: label 為b和t命令定義標簽。#comment 注釋一行} 塊結束符號0地址或者1地址命令= 打印當前的行號a \ text 追加新行 追加文本,(模式空間內的)每一行后都將追加(新行)反斜杠后的文本。 例如
echo “abc” | sed ‘a\def’ # 輸出 abc # def
- i \ text 插入新行 插入文本, (模式空間內的)每一行前都將插入(新行)反斜杠后的文本。 例如
echo “abc” | sed ‘i\def’ # 輸出 def # abc
- q [exit-code] 立即退出sed腳本不處理任何更多的輸入, 除非自動打印是未禁用的情況下當前的模式空間將被打印。退出碼參數是一個GNU擴展。Q [exit-code] 立即退出sed腳本不處理任何更多的輸入。退出碼參數是一個GNU擴展。r filename 追加從filename讀取的文本R filename 追加從filename讀取的一行。每次調用命令從文件中讀取一行。這是一個GNU擴展。接受地址范圍的命令{ 塊命令的開始,b label 跳轉到標簽,如果label省略,跳轉到命令結尾。c \ text 行替換 用text替換選中的行,每一行都將被反斜杠后的文本替換。 例如
echo -e “abc\ndef” | sed ‘c\ghi’ # 輸出 ghi # ghi
- d 刪除模式空間。啟動下一個循環。當模式空間有多行時,D命令每次只刪除一行,然后從下一行開始新的循環,這里的下一行是模式空間中的第二行,所以不從輸入讀入新行。 然后從下一行開始循環,這里的下一行就是從輸入讀取的新行了。 例如
echo -e “abc\ndef\nghi\njkl” | sed -n ‘N;/abc\ndef/d;p’ # 輸出 ghi # jkl # sed共執行了2次循環,第一次循環如下 # N追加了一行,模式空間內容為”abc\ndef”;刪除模式空間;開始下一個循環,讀入輸入的第一行,模式空間內容為”ghi”; # 第二次循環如下 # N追加了一行,模式空間內容為”ghi\njkl”;刪除操作未執行;打印模式空間。 echo -e “abc\ndef\nghi\njkl” | sed -n ‘N;/abc\ndef/D;p;p’ # 輸出 def # ghi # def # ghi # sed共執行了2次循環,第一次循環如下 # N追加了一行,模式空間內容為”abc\ndef”;刪除模式空間的第一行,模式空間內容為”def”;開始下一個循環; # 第二次循環如下 # N追加了一行,模式空間內容為”def\nghi”;刪除操作未執行;打印模式空間,打印模式空間。
?
- h H 復制/追加 模式空間到保持空間。g G 復制/追加 保持空間到模式空間。 例如
?
echo -e “abc\ndef” | sed -n ‘h;n;g;p’ # 輸出 abc echo -e “abc\ndef” | sed -n ‘h;n;G;p’ # 輸出 def # abc echo -e “abc\ndef” | sed -n ‘h;n;H;G;p’ # 輸出 def # abc # def
?
- ?n N 讀取/追加 輸入的下一行到模式空間。
echo -e “abc\ndef” | sed -n ‘n;p’ # 輸出 def echo -e “abc\ndef” | sed -n ‘N;p’ # 輸出 abc # def
?
- p 打印當前的模式空間。P 打印(的內容只)到當前模式空間的第一個換行符。只打印一行的意思。 例如,
?
echo -e “abc\ndef” | sed -n ‘N;/abc\ndef/p’ # 輸出 abc # def echo -e “abc\ndef” | sed -n ‘N;/abc\ndef/P’ # 輸出 abc
?
- s/regexp/replacement/ 用replacement替換匹配的內容 嘗試對模式空間匹配正則表達式。如果成功,用replacement替換掉匹配的部分。replacement可能包含特殊的字符&引用已匹配的那部分。特殊的轉義\1到\9引用正則表達式中對應的子表達式。 例如
echo “abc” | sed ‘s/abc/def/’ # 輸出 def echo “abc” | sed ‘s/abc/&def/’ # 輸出 abcdef
原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/88052