文本處理工具之SED流編輯器
阿新 • • 發佈:2019-05-17
fstab文件 屏幕 編輯器 常用 多行模式 表達式 重定向 等價 內容 文本處理三劍客之SED(流編輯器)
sed的工作方式:在指定文件中,按行讀取內容至模式空間,然後根據sed的scripts編輯改行內容,編輯完畢後輸出至屏幕,再讀取下一行進行處理。如果有該行內容未被處理完畢就有新的內容要進行編輯,則把該行內容移至保持空間中,,保持空間中的內容可以隨時調回模式空間中。
sed的使用
使用格式:sed [options...] ‘scipts‘ file
- 常用選項:
- -n:不輸出模式空間中的內容至標準輸出(不自動打印)
- -e script:多點編輯
sed -e ‘[email protected]^#[[:space:]]@[email protected]‘ -e ‘/^UUID/‘ /etc/fatab- -f sed_script_fie:調用sed的編輯腳本文件(文件中每行一個編輯腳本)
- -r:支持使用擴展正則表達式
- -i:直接編輯源文件
- -i.bak:備份源文件並在原文編輯
地址定界機制:
- 空地址:對全文進行處理
- 單地址
- #:指定第#行
- $:最後一行
- /pattern/:被此模式所匹配到的行
- 地址範圍:
- #,#:第#行到第#行
- #,+#:第#行到#+#行
- #,/pattern/:第#行到被模式匹配到的行
- /pattern1/,/pattern2/:第一次被模式1匹配到的行到第一次被模式2匹配到的行
- 步進:~
- 1~2:所有奇數行
- 2~2:所有偶數行
編輯命令:
- 單地址
- d:刪除
- p:顯示模式空間中的內容
- a \test:在行後面追加文本“test”,支持使用\n實現多行追加
- i \test:在行前面追加文本“test”支持使用\n實現多行追加
追加的時候,要插入變量使用‘‘‘$變量‘‘‘
- c \test:把匹配到的行替換為此處指定的文本
- w file:保存模式空間中的內容至文件中,相當於重定向
- r file:讀取指定文件中的內容自己當前文件被模式匹配的行的後面
- =:為模式匹配到的行打印行號
- !:條件取反
- s///:查找替換,其分隔符可自定義,常用的有[email protected]@@,s###等
替換標記:
- g:全局替換
- w file:將替換完的結果保存到指定文件中
- p:顯示替換成功的行
練習
- 刪除/boot/grub/grub2.cfg文件中所有以空白字符開頭的行的行首的所有空白字符;
~]# sed ‘[email protected]^[[:space:]][email protected]@‘ /etc/grub2.cfg- 刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#後面的所有空白字符;
~]# sed ‘[email protected]^#[[:space:]]*@@‘ /etc/fstab - 在/etc/grub2.cfg文件中包含linux16的行的行尾加上net.ifnames=0
sed -nr ‘/linux16/s/.*/& net.ifnames=0/p‘ /etc/grub2.cfgsed的高級編輯命令:
- 刪除/etc/fstab文件中所有以#開頭的行的行首的#號及#後面的所有空白字符;
- h:把模式空間中的內容覆蓋至保持空間中
- H:把模式空間中的內容追加至保持空間中
- g:把保持空間中的內容覆蓋至模式空間中
- G:把保持空間中的內容追加至模式空間中
- x:把模式空間中的內容與保持空間中的內容互換
- n:覆蓋讀取匹配到的行的下一行到模式空間中
- N:追加讀取匹配到的行的下一行到模式空間中
- d:刪除模式空間中的行
- D:刪除多行模式空間中的開始到\n的行
示例:
- sed -n ‘n;p‘ FILE:顯示偶數行;
- sed ‘n;d‘ FILE:顯示奇數行;
- sed ‘1!G;h;$!d‘ FILE:逆序顯示文件的內容; 等價於sed -n ‘1!G;h;$p‘
- sed ’$!d‘ FILE:取出最後一行;
- sed ‘$!N;$!D‘ FILE:取出文件後兩行;
- sed ‘N;D‘:取出最後一行;
- sed ‘/^$/d;G‘ FILE:刪除原有的所有空白行,而後為所有的非空白行後添加一個空白行;
- sed ‘G‘ FILE:在原有的每行後方添加一個空白行;
文本處理工具之SED流編輯器