Linux/UNIX中的sed命令是Stream Editor文本流編輯的縮寫,它能同時處理多個文件多行的內(nèi)容,比如文搜索,查找和替換,插入或刪除。雖然sed命令在Linux/UNIX中最常見的用途是替代或查找。通過使用sed,您甚至可以在不打開文件的情況下編輯文件,這比先在VI編輯器中打開文件然后更改文件要快得多。
- sed是一個強大的文本流編輯器。可以做插入、刪除、搜索和替換(替換)。
- Linux/UNIX中的sed命令支持正則表達(dá)式,從而可以執(zhí)行復(fù)雜的模式匹配。
語法:
set [option] ‘command’ input_file
其中option是可選的,常用的option有以下幾種:
- -n 使用安靜(silent)模式(為什么不是-s呢?)。在一般sed的用法中,所有來自stdin的內(nèi)容一般都會被列出到屏幕上。但如果加上-n參數(shù)后,則只有經(jīng)過sed特殊處理的那一行(或者動作)才會被列出來;
- -e 直接在指令列模式上進(jìn)行 sed 的動作編輯;
- -f 直接將 sed 的動作寫在一個文件內(nèi), -f filename 則可以執(zhí)行filename內(nèi)的sed命令;
- -r 讓sed命令支持?jǐn)U展的正則表達(dá)式(默認(rèn)是基礎(chǔ)正則表達(dá)式);
- -i 直接修改讀取的文件內(nèi)容,而不是由屏幕輸出。
常用的命令有以下幾種:
- a : append即追加字符串, a 的后面跟上字符串s(多行字符串可以用n分隔),則會在當(dāng)前選擇的行的后面都加上字符串s;
- c : 取代/替換字符串,c 后面跟上字符串s(多行字符串可以用n分隔),則會將當(dāng)前選中的行替換成字符串s;
- d: delete即刪除,該命令會將當(dāng)前選中的行刪除;
- i : insert即插入字符串,i 后面跟上字符串s(多行字符串可以用n分隔),則會在當(dāng)前選中的行的前面都插入字符串s;
- p: print即打印,該命令會打印當(dāng)前選擇的行到屏幕上;
- s: 替換,通常s命令的用法是這樣的:1,2s/old/new/g,將old字符串替換成new字符
使用方法:
比如我們打開LinuxMi.py文件看下
1 import re 2 str_test='abcdefgHABC123456Linux迷' 3 4 #把正則表達(dá)式編譯成對象,如果經(jīng)常使用該對象,此種方式可提高一定效率 5 num_regex = re.compile(r'[0-9]') 6 zimu_regex = re.compile(r'[a-zA-z]') 7 hanzi_regex = re.compile(r'[u4E00-u9FA5]') 8 9 print('輸入字符串:',str_test) 10 #findall獲取字符串中所有匹配的字符 11 num_list = num_regex.findall(str_test) 12 print('包含的數(shù)字:',num_list) 13 zimu_list = zimu_regex.findall(str_test) 14 print('包含的字母:',zimu_list) 15 hanzi_list = hanzi_regex.findall(str_test) 16 print('包含的漢字:',hanzi_list)
我們看替換文件里面的內(nèi)容,把 fill 改成 fillAA,用如下命令
1、a命令用法
主要在一行的后面加上 我們需要的東西
比如我們要在第一行增加字符串 linuxmi
[linuxmi@linux:~/Linux迷] $ sed ‘1 alinuxmi’ LinuxMi.py
1 a是第一行的意思, 比如是2到3行 可以用 2,3 $是末尾的是必然要 第二行到末尾一行可以用這個表示 2,$ 比如我們要在第二行到末尾一行增加 linuxmi.com,如下命令
[linuxmi@linux:~/Linux迷] $ sed ‘2,$ alinuxmi.com’ LinuxMi.py
效果如下
2、i命令用法
主要在一行的前面加上我們需要的東西,和a命令的效果一樣。
3、c命令用法
主要是替換一行,比如
[linuxmi@linux:~/Linux迷] $ sed ‘$ cwww.linuxmi.com’ LinuxMi.py
4、d命令用法
刪除第5行到末尾
[linuxmi@linux:~/Linux迷] $ sed ‘5,$d’ LinuxMi.py
5、p命令用法
p是屏幕打印和d的用法一樣
6、s命令用法
主要是替換內(nèi)容,比如在文本里面把 regex 全部替換成regexp
[linuxmi@linux:~/Linux迷] $ sed ‘s/regex/regexp/g’ LinuxMi.py
g是全部內(nèi)容意思
7、刪除配置文件中#開頭的注釋行
[linuxmi@linux:~/Linux迷] $ sed ‘/^#/d’ LinuxMi.py
8、將所有數(shù)字替換成*
[linuxmi@linux:~/Linux迷] $ sed ‘s#[0-9]#*#g’ LinuxMi.py
9、查詢指定分行
[linuxmi@linux:~/Linux迷] $ sed -n ‘2p;5p’ LinuxMi.py
sed可以用來自動編輯一個或多個文件,簡化對文件的反復(fù)操作,編寫轉(zhuǎn)換程序等。暫時先這樣吧。
更多Linux命令相關(guān)信息見Linux命令大全 專題頁面 http://www.sfodin.cn/topicnews.aspx?tid=16