linux中的sed 命令

2021-08-27 18:19:38 字數 2008 閱讀 3435

sed的基本語法

sed [-hnv][-e』script』][-f script檔案][文字檔案]

引數說明:

-h或–help 顯示幫助; -n或- -quiet或–silent 僅顯示script處理後的結果; -v或- -version 顯示版本資訊。

-e 『script』]或- -expression=』script』 以選項中指定的script來處理輸入的文字檔案。-e可以省略,用』』標註script就可以了.

-f script檔案或- -file=script檔案 以選項中指定的script檔案來處理輸入的文字檔案。-f也可以省略, 直接給出檔名稱就可以.

但是! 用sed選項-e將改動直接修改到原始檔是非常危險的, 可以採用重定向的方式儲存sed的輸出,例如:

sed 『some-sed-commands』 input_file>output_file

這裡主要說說sed 的替換功能.

sed替換指定文字

sed命令配合正規表示式可以替換指定文字,基本的script格式為:

sed 『s/要被取代的字串/新的字串/g』

這裡s表示替換命令, 命令末端的g表示在行內進行全域性替換. //符號稱為delimiter, sed命令支援的delimiter有很多,除了常見的//以外, 還有@, _, #, 甚至空格都是sed命令支援的delimiter. 豐富的delimiter支援可以讓正規表示式script更好讀

例如: 如果datafile中有多個my開頭的文字,所有開頭的my都被替換為you。

sed 『s/^my/you/g』 datafile

例如: 取消預設輸出,處理1到20行裡匹配以my結尾的行,把行內所有的my替換為you,並列印到螢幕上。

sed -n 『1,20s/my$/you/gp』 datafile

再舉乙個比較難的例子:取出乙個檔案路徑的目錄名稱;

echo 「/etc/rc.d/abc/edu/」 | sed -r 『s@^(/.*/)[^/]+/?@\1@g』

因sed支援擴充套件正規表示式,在擴充套件正規表示式中,+表示匹配其前面的字元至少1次. () 為子表示式, 為字元列表. 這裡的delimiter符號是@. 對script每個部分詳細展開:

s@^ 這裡的^表示指定開頭符號;

[^/]+/則是在匹配的字元中匹配 「非/符號和/構成的字段」.

? 匹配前面的子表示式零次或一次,或指明乙個非貪婪限定符。

@\1@g 語句的最後部分代表將s@…@中間正規表示式(/.*/)[/]+/?得到的匹配字串全部替換為倒數第1個 「非/符號和/構成的字段」.

取出乙個檔案路徑的最後乙個檔名;

echo 「/etc/rc.d/abc/edu/」 | sed -r 『s@^ /.*/([^/]+)/?@\1@g』

更多例子,值得仔細理解:

1、刪除/etc/grub.conf檔案中行首的空白符;

sed -r 『s/^[[:space:]]+//』 /etc/grub.conf

2、替換/etc/inittab檔案中「id:3:initdefault:」一行中的數字為5;

sed 『s/(id:)[0-9](:initdefault:)/\15\2/g』 /etc/inittab

3、刪除/etc/inittab檔案中的空白行;

sed 『/^$/d』 /etc/inittab

4、刪除/etc/inittab檔案中開頭的#號;

sed 『s/^#//g』 /etc/inittab

5、刪除某檔案中開頭的#號及其後面的空白字元,但要求#號後面必須有空白符;

sed 『s/^#[[:space:]]//g』 /etc/inittab 或者

sed -r 『s/^#[[:space:]]+//g』 /etc/inittab

6、刪除某檔案中以空白字元後面跟#類的行中的開頭的空白字元及#

sed -r 『s/^[[:space:]]+#//g』 /etc/inittab

linux中的sed命令

昨天我學習了awk,今天來學習一下sed sed是乙個管線命令,可以分析standard inputer,並且能對資料進行取代,新增,刪除,擷取特定行等功能。sed nefri 動作 n 使用安靜 silent 模式。一般在sed中所有來自stdin的資料一般都會被列出在熒幕上,但如果加上 n引數後...

Linux中的sed 命令

sed本身是乙個逐行處理工具,會逐行處理到檔案的結束。預設情況下不修改原始檔,因為sed是將原始檔內容逐行copy到乙個臨時緩衝區 模式空間 對其進行編輯,行處理結束後,將其輸出到螢幕上,也可以通過資料重定向將結果匯入到新的檔案中去。sed本身提供修改原始檔的選項。但是如果修改原始檔時,結果內容並不...

Linux中sed命令用法

定址 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1,3表示1,2,3行,美元符號 表示最後一行。範圍可以通過資料,正規表示式或者二者結合的方式確定 sed命令 呼叫sed命令有兩種形式 sed options co...