一、概述
sed是一種流編輯器,與交互式編輯器不同,流式編輯器會在處理數據之前基於預先提供的一組規則來編輯數據流。
sed可以從標準輸入(stdin)獲取輸入,處理結果從標準輸出(stdout)輸出。sed會一行一行地讀入輸入,然後按照預設命令對每行數據進行操作,若輸入的是一個文件的內容,sed不會在源文件上修改,而只是在標準輸出打印結果。
二、用法初涉
1、替換操作
echo "hello world" | sed 's/hello/HELLO/'
結果:hello world會被替換爲HELLO world並從標準輸出輸出,命令‘s’是替換的意思。
2、多命令操作
使用分號隔開多命令
echo "hello world" | sed 's/hello/HELLO/;s/world/WORLD/'
或者直接換行,每行一個命令
echo "hello world" | sed '
>s/hello/HELLO/
>s/world/WORLD/'
兩種操作的結果都是把hello world替換爲HELLO WORLD。(我看的參考書裏面說多命令要加上-e選項,但我沒有加也可以完成操作。)
3、將命令存儲在文件中
若有很多的命令,可以預先將命令存放在文件中,每行一個操作命令,在sed中使用-f選項指定從該文件中讀取命令即可。
比如cmd.sed文件中存放以下命令
s/hello/HELLO/
s/world/WORLD/
則echo 'hello world' | sed -f cmd.sed
可完成替換功能。
三、基本操作
1、更多的替換選項
echo "hello hello " | sed 's/hello/HELLO/'
結果:
HELLO hello
該條命令的結果是HELLO hello,sed並沒有將所有的小寫hello替換爲大寫HELLO。
echo "hello hello" | sed 's/hello/HELLO/2'
結果:
hello HELLO
加上2會將第二個hello替換爲HELLO。
echo "hello hello" | sed 's/hello/HELLO/g'
結果:
HELLO HELLO
g選項會將所有的hello替換爲HELLO
echo "hello hello" | sed 's/hello/HELLO/w result.txt'
w選項會讓被修改的行被寫入到result.txt文件中。
2、地址定位
假設有文件hello.txt,其內容如下:
hello hello
hello hello
hello hello
hello hello
this is a test text file
(1)使用數字定位
例
sed '2s/hello/HELLO/g' hello.txt
結果:
hello hello
HELLO HELLO
hello hello
hello hello
this is a test text file
hello.txt文件第二行的所有hello被替換爲HELLO
例
sed '2,3 s/hello/HELLO/g' hello.txt
該操作會對第二行、第三行進行替換。
sed '2,$ s/hello/HELLO/g' hello.txt
該操作會將第二行向後所有的行進行替換。
3、文本定位
除了指定哪一行還可以進行文本模式匹配進行定位。
若有test.txt文件,其內容如下
hello everyone,this is
a test for the commond
sed, you can learn how to
use this commond to finish
your work.
命令sed '/can/s/learn/LEARN' test.txt
結果:
hello everyone,this is
a test for the commond
sed, you can LEARN how to
use this commond to finish
your work.
sed會定位到有can字符串的那一行,然後將該行的learn替換爲LEARN。如果你瞭解正則表達式,那麼可以使用正則表達式來找到你的目標行,然後進行相關操作。
若要對一行執行多數操作,則使用{}將多個操作命令括起來。
sed '/can/{s/learn/LEARN/;s/how/HOW/}' test.txt
3、刪除操作
在sed中不僅可以進行替換操作,還可以進行刪除操作’d’,其用法與’s‘差不多。
有rmove.txt文件,其內容如下
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
sed '2d' remove.txt
結果:
this is line 1
this is line 3
this is line 4
this is line 5
會刪除第二行,類似操作還有
sed '2,4d' rmove.txt
sed '2,$d' rmove.txt
sed '/1/d' rmove.txt
4、插入或附加
插入使用i命令,附加使用a命令。兩者的區別是,i是在行的前面插入一行,a是在行的後面追加一行,用法同替換、刪除差不多,只不過被用來插入的文本要用‘\’開頭。
echo "hello hello" | sed '1i\HELLO'
結果:
HELLO
hello
echo "hello hello" | sed "1a\HELLO'
結果:
hello hello
HELLO HELLO
5、改變文本
改變問唄的意思就是替換整行,用法同插入附加差不多,只是用c命令。很簡單,我也敲累了,不想舉例了。
6、文本操作
使用w命令可以將改變的行輸出到指定文件,使用r命令可以將文本插入指定位置。
加入有文件text.txt,內容如下:
hello hello
hello hello
hello hello
hello hello
echo "111111111111111" | sed '/1/r ./text.txt'
結果:
111111111111111
hello hello
hello hello
hello hello
hello hello
echo "11111111111" | sed '/1/w tmp.txt'
結果:
cat tmp.txt
11111111111
sed的一些最基本的用法就是這些,還有一些高級用法以後再說。