sed命令

sed命令 sed:Stream Editor,流編輯器 行編輯操作工具; sed再實施文本文件處理時,是以行爲單位對一個或多個文件進行行編輯處理; 每次sed會處理給定的文件中的一行內容; sed在處理文件時,將正在處理的當前行存儲到臨時的內存緩衝區中,稱爲“模式空間” 所謂的模式空間是sed命令的主要工作車間;對於緩存的行,使用給定的PATERN取匹配, 如果能匹配成功,則使用相應的Command進行編輯處理;反之,將此行直接發送至標準 輸出,而後繼續處理下一行,知道文檔結尾; 默認其概況下,sed處理的文件內容都是在內存中完成的,並不會影響磁盤上存放的文件內容; sed默認有循環遍歷的含義,可以使用sed簡化爲文件的遍歷循環操作; sed命令: sed - stream editor for filtering and transforming text 格式: sed [OPTION]... {script} [input-file]... 常用選項: -n, --quiet, --silent:對不能被PATTERN匹配的行,不發往標準輸出; -e script, --expression=script:多條件編輯; -f script-file, --file=script-file:從指定的script-file中讀取腳本內容再編輯; 注意:script-file最好使用絕對路徑來指定; -i[SUFFIX], --in-place[=SUFFIX]:直接編輯源文件(不建議使用); -r, --regexp-extended:可以使用sed支持擴展正則表達式; 例:輸出以#開頭的行:# sed -n '/^#/p' /etc/fstab script:AddressesCommand Addresses:地址定界 1.空地址:表示對所有文件的所有行進行編輯處理; 2.單地址:sed對於能夠匹配該地址的唯一地址一一進行處理; #:表示指定行號那行; /PATTERN/:能夠被PATTERN匹配到的所有行; $:表示指定文件的最後一行;sed不支持$-1; 3.地址範圍: add1,add2:add1和add2都表示行號,從add1行開始到add2行結束中的所有行,包括add1和add2; first-step:first和step都是數字,從first行開始,以step爲步長,所進過的所有行;例:1~1 addr1,+N:從addr1行開始,向後查找N行; addr1,~N:從addr1行開始,向後查找addr1*N行,包括addr1行; 例:輸出文件前三行:# sed -n '1,3p' /etc/fstab 4./PATTERN1/,/PARTTERN2: 從被PATTERN1第一次匹配的行開始,到被PATTERN2第一次匹配的行結束;繼續向後找第二次匹配 第三次匹配的行...... Command: =:顯示被PATTERN匹配到的行的行號; a \text:在被模式匹配的行之後追加text的內容;支持使用“\n”換行,從而實現追加多行信息; i \text: 在被模式匹配的行之前追加text的內容;支持使用“\n”換行,從而實現追加多行信息; c \text: 在被模式匹配的行直接修改爲text的內容;支持使用“\n”換行,從而實現修改原內容多行信息; d Delete pattern space. Start next cycle.在模式空間中刪除被模式匹配的行; 注意: 一般在使用d命令時,不建議使用-n; p:j將模式空間中被模式匹配的行發送到標準輸出; 注意: 一般在使用p命令時,建議使用-n; w filename:filename可以是一個相對路徑,也可以是一個絕對路徑;w命令將模式空間中被模式匹配 到的行,存儲到指定文件中; 注意: 一般在使用w命令時,建議使用-n; r filename:可以是一個相對路徑,也可以是一個絕對路徑;r命令將模式空間中被模式匹配 到的文件內容添加至被模式匹配的行的後面; !Command:在模式空間中被模式匹配的行,不執行Command;相反,沒有被匹配但的行執行Command; 例:在以#開頭的行後追加666的內容:sed '/^#/a \666' /etc/fstab 例:輸出以空白字符開頭的行:# sed -n '/^[[:space:]]/p' dl.txt s///:查找並替換,分隔符可以隨意更換,但須保持一致;s@@@.... s/regexp/replacement/[control] regrexp:正則表達式,也就是PATTERN,計劃查找並替換的就是被regrexp匹配到的內容; replacement:要替換的結果,純字符串; 支持後向引用: s/\(string\)/&/ s/\(string\)/\1/ 例:將文件中的#替換爲@:# sed 's/^#/@/' /etc/fstab 將文件中開頭的空白字符替換成#:# sed 's/^[[:space:]]/#/' dl.txt 高級編輯命令: h:將模式空間中的內容存儲到保持空間中,並覆蓋保持空間中原有內容; H:將模式空間中的內容存儲到保持空間中,並追加至原有內容之後; g:從保持空間取出數據存儲到模式空間中,並覆蓋模式空間的原有內容; G:從保持空間取出數據存儲到模式空間中,並追加至原有內容之後; x:將模式空間中的內容與保持空間中的內容交換; n:讀取被PATTERN匹配到的行的下一行,覆蓋到模式空間; N:讀取被PATTERN匹配到的行的下一行,追加到模式空間; D:刪除模式空間中的所有行;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章