sed命令簡介

2021-09-20 22:30:32 字數 3250 閱讀 7331

1

2

3

4

文字處理三劍客:

grep:egeep,fgrep:文字過濾器

sed:stream editor:流編輯器,逐行

awk:文字格式化工具,報告生成器

一、sed簡介

sed一次從檔案中讀取一行,不會修改原檔案的內容

sed命令將當前處理的行讀入模式空間(pattern space)進行處理,sed在該行上執行完所有命令後就將處理好的行列印到螢幕上(除非之前的命令刪除了該行)

sed處理完一行就將其從模式空間中刪除,然後將下一行讀入模式空間,進行處理、顯示。

處理完檔案的最後一行,sed便結束執行。sed在臨時緩衝區(模式空間)對檔案進行處理,所以不會修改原檔案,除非顯示指明-i選項。

放在sed的工作空間:pattern space 處理-->模式匹配-->匹配(則編輯->根據編輯命令是否輸出) //不匹配(stout)

輸出到-->stout

可以基於正規表示式進行文字過濾

把檔案的

檔案行資料流:--->|pattern space|  //預設顯示沒有匹配到的行

v/      \

no        yes

|        /  \

|     /    edit

|   /        |

v/            hold space 

stdout        

//sed空間:空間可以轉換

pattern space 

hold space //處理的結果

sed [option] ... 'script' [input-file]...  //輸入檔案可以有多個

script:位址定界+編輯命令

options:

-n ,--quiet,--slient不輸出模式空間的內容到螢幕

suppress:壓制,不讓

-e script, --expression=script //預設只有乙個script,實現多點編輯

-f script-file //指令碼檔案,每行乙個編輯命令

-r 支援擴充套件的正規表示式

-i 直接編輯原檔案

位址定界:

1.空位址,表示對全文進行處理

2.單位址,

# :指定行

/pattern/ :被此模式匹配到的每一行

3.位址範圍

#,# //起始位址

#,+# //向後幾行

#,/pattern/  //到pattern模式匹配結束

/pat1/,/pat2/   //斜線是預設的,必須有

4.步進:~

1~2 //所有的奇數行

2~2 //所有的偶數行

編輯命令:

d 刪除模式空間的內容

sed '/^uuid/d' /etc/fstab //刪除uuid開頭的行

sed '3d' /etc/fstab //刪除第3行

sed '1~2d' /etc/fstab  //顯示偶數行,刪除奇數行

p 列印模式空間的內容

sed '1~2p' /etc/fstab //模式空間顯示兩遍,

//偶數行沒有被匹配,因此顯示

//奇數行被匹配到,預設為顯示

//edit後的操作是顯示

sed '1~2p' /etc/fstab -n //只顯示奇數行,模式空間的內容

a\test 追加 :在模式匹配到的行,下一行追加文字,支援使用,\n實現多行追加

後面追加

i\test:在行前面插入文字,支援使用\n實現多行插入

sed '3i \new line' fstab.t //不匹配到的行,預設也為輸出

sed '3a \new line\nanother line' fstab.t //插入兩行

sed '/uuid/a \# add new device base on uuid' fstab.t //在每一行的uuid前面都加了資訊

c\text:把匹配到的行替換為此處指定的文字"text";

主要: "/" 和 "\" 都可以使用

w /path/to/somewhere :儲存模式空間匹配到的行至指定的檔案中

sed -n '/^[^#]/w /tmp/fsatb.test' fstab //把非#開頭的行,儲存到檔案

r /path/to/somefile :讀取指定檔案的內容到當前檔案被模式匹配到的行中

sed '3r /etc/issue' fstab //在3行,讀入issue的內容

sed '/dev/r /etc/issue' fstab //匹配到的行,都讀入issue檔案內容

= 為模式空間匹配到的行,列印行號

sed '/dev/=' fstab

! 條件取反

sed '/^#/!d' /etc/fstab //模式取反

s/// :查詢替換,其分隔符可自行指定,常用的分隔符,s##,s@@,s///等

替換標記:

g:全域性替換

w /path/to/somefile:儲存到指定檔案

p:顯示替換成功的行

二、練習

1.刪除/boot/grub/grub2.cfg檔案中所有以空白開頭的行的行首的所有空白字元

2.刪除/etc/fstab檔案中所有以#開頭的行的行首的#號以及#號後面的空白字元

3.輸出乙個絕對路徑,取出其目錄,其行為類似於dirname

1.sed 's@^[[:space:]]\+@@' /etc/grub2.cfg 

2.sed 's@^#[[:space:]]*@@' /etc/fstab

sed 's@^#[[:space:]]*@@' -e '/^uuid/d' /etc/fstab

3.echo "/var/log/messages" | sed 's@[^/]\+$@@'

echo "/var/log/messages/" | sed 's@[^/]\+/\?$@@'  //基本的正規表示式,\?需要轉義:可有可無

echo "/var/log/messages/" | sed -r 's@[^/]+/?$@@'    //擴充套件的正規表示式

三、高階編輯命令

sed工具簡介

基本上來說,sed是乙個可以分析standard input stdin 的資料,然後將資料經過處理後,再將它輸出到standard output stdout 的工具。比如取代,刪除,新增,選取特定行等等功能。語法基本上就是 sed nefr some actions here actions有a...

sed原理及sed命令格式

4.1 sed工作原理 sed是乙個非互動式的流編輯器。所謂非互動式,是指使用sed只能在命令列下輸入編輯命令來編輯文字,然後在螢幕上檢視輸出 而所謂流編輯器,是指sed每次只從檔案 或輸入 讀入一行,然後對該行進行指定的處理,並將結果輸出到螢幕 除非取消了螢幕輸出又沒有顯式地使用列印命令 接著讀入...

sed命令詳解

sed 是乙個精簡的 非互動式的編輯器。它能執行與編輯vi和emacs相同的編輯任務。sed編輯器不提供互動使用方式 只能在命令列輸入編輯命令 指定檔案 名,然後在螢幕上察看輸出。sed編輯器沒有破壞性。它不會修改檔案,除非用shell重定向來儲存輸出結果。預設情況下,所以的輸出都被列印到螢幕上。1...