Linux sed 命令詳解
Linux sed 命令詳解
Linux sed 命令是利用指令碼處理文字檔案。
sed 可按照指令碼的指令來處理、編輯文字檔案。
sed 主要用於自動編輯一個或多個檔案、簡化對檔案的反覆操作、編寫轉換程式等。
語法:
sed [-hnV][-e<script>][-f<script檔案>][文字檔案]
引數說明:
-e <script>或--expression=<script> 以選項中指定的script來處理輸入的文字檔案。
-f <script檔案>或--file=<script檔案> 以選項中指定的script檔案來處理輸入的文字檔案。
-h 或--help 顯示幫助。
-n 或--quiet或--silent 僅顯示script處理後的結果。
-V 或--version 顯示版本資訊。
動作說明:
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!
d :刪除,因為是刪除啊,所以 d 後面通常不接任何咚咚;
i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);
p :列印,亦即將某個選擇的資料印出。通常 p 會與引數 sed -n 一起執行~
s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正規表示法!例如 1,20s/old/new/g 就是啦!
元字符集:
^ 指定行的開始
$ 指定行的結尾
. 匹配一個非換行符的字元
* 匹配零個或多個字元
[] 匹配指定字元內的任一字元
[^] 匹配不在指定字元內的任一字元
.. 儲存已匹配的字元
& s/super/YY&yy/ super變成YYsuperyy & 儲存搜尋字元用來替換其他字元
\< 詞首定位符 /\<my/ 匹配包含以my開頭的單詞的行
\> 詞尾定位符 /my\>/ 匹配包含以my結尾的單詞的行
x\{m\} 連續m個x /9\{5\}/ 匹配包含連續5個9的行
x\{m,\} 至少m個x /9\{5,\}/ 匹配包含至少連續5個9的行
x\{m,n\} 至少m個,但不超過n個x /9\{5,7\}/ 匹配包含連續5到7個9的行
例項:
在testfile檔案第四行後新增一行,並將結果輸出到標準輸出,在命令列提示符輸入如下命令:
sed -e 4a\hellowolrd testfile
檢視testfile 中的內容:
[root@127-0-0-1 yoon]# cat testfile.txt
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
good good study!
Linux test
使用sed命令後,輸出結果如下:
[root@127-0-0-1 yoon]# sed -e 4a\helloworld testfile.txt
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
good good study!
helloworld
Linux test
[root@127-0-0-1 yoon]# sed -e '4a\hello world' testfile.txt
HELLO LINUX!
Linux is a free unix-type opterating system.
This is a linux testfile!
good good study!
hello world
Linux test
以行為單位的新增和刪除
刪除
將testfile的內容列出並且列印行號,同時刪除第4-5行刪除
[root@127-0-0-1 yoon]# nl testfile.txt
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
[root@127-0-0-1 yoon]# nl testfile.txt | sed '4,5d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
6 Linux test
sed的動作為'4,5d',d是刪除,因為4-5行刪除了,所以顯示的資料沒有4-5行,另外,原本應該要下達 sed -e 才對,沒有 -e 也可以。同事注意,sed 後面接的動作,務必以 '' 兩個單引號擴住。
只刪除第二行:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2d'
1 HELLO LINUX!
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
刪除第三行到最後一行:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '3,$d' ($代表最後一行)
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
新增
在第二行後面加上drink milk 字樣(亦即是加在第三行):
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2a drink milk'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
drink milk
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
如果加入到第二行前:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2i drink milk'
1 HELLO LINUX!
drink milk
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
如果是增加兩行以上,在第二行後面加入兩行字,例如,drink milk,eat pig :
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2a drink milk\ (每一行之間都必須要以反斜槓『 \ 』來進行新行的新增)
> eat pig'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
drink milk
eat pig
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2a drink milk\neat pig' (\n換行符)
1 HELLO LINUX.
2 This is a linux testfile.
drink milk
eat pig
3 good good study.
4 hello world.
5 Linux test.
6 #This is good !
追加一行的話,不需要換行符\n,只有追加多行的情況下才需要換行符,最後一行也無需新增換行符,新增的話會多出一個空格
在第四行新增一行:
[root@127-0-0-1 yoon]# sed -e '4a new world' testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
new world
Linux test.
#This is good !
在第四行追加兩行:
[root@127-0-0-1 yoon]# sed -e '4a new world\nold world' testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
new world
old world
Linux test.
#This is good !
在第四行追加三行(兩行文字和一行空格):
[root@127-0-0-1 yoon]# sed -e '4a new world\nold world\n' testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
new world
old world
Linux test.
#This is good !
新增一個空行:
[root@127-0-0-1 yoon]# sed -e '4a \\' testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
Linux test.
#This is good !
新增兩個空行:
[root@127-0-0-1 yoon]# sed -e '4a \\n' testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
Linux test.
#This is good !
以行為單位的替換和顯示
將第3-4行替換為 No 2-5 number
[root@127-0-0-1 yoon]# nl testfile.txt | sed '2,5c No 2-5 number' (透過這個方法可以取代整行)
1 HELLO LINUX!
No 2-5 number
6 Linux test
僅列出第2-3行:
[root@127-0-0-1 yoon]# nl testfile.txt | sed -n '2,3p'
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
資料的搜尋並顯示
搜尋 linux 關鍵字的行:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '/linux/p' (如果linux找到,除了輸出所有行,還會匹配輸出行)
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
使用 -n 的時候只輸出包含模板的行
[root@127-0-0-1 yoon]# nl testfile.txt | sed -n '/linux/p'
3 This is a linux testfile!
資料的搜尋並刪除
刪除testfile中包含linux的行,其他行輸出:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '/linux/d'
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
4 good good study!
5 hello world
6 Linux test
資料的搜尋並執行命令
搜尋 linux 對應的行,執行花括號中的命令,每個命令用分號分隔,並把 testfile 替換成 newtestfile,再輸出這行:
[root@127-0-0-1 yoon]# nl testfile.txt | sed -n '/linux/{s/testfile/newtestfile/;p;q}' (最後的 q 是退出)
3 This is a linux newtestfile!
資料的搜尋並替換
除了整行的處理模式之外,sed 還可以用行為單位進行部分資料的搜尋並替換,基本上 sed 的搜尋與替代的 vi 相當的類似,有點像這樣:
sed 's/要被取代的字串/新的字串/g'
檢視 newtestfile 檔案內容:
[root@127-0-0-1 yoon]# cat newtestfile.txt
eth0 Link encap:Ethernet HWaddr 00:90:CC:A6:34:84
inet addr:192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::290:ccff:fea6:3484/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
本機的ip是192.168.1.100,將 IP 前面的部分予以刪除:
[root@127-0-0-1 yoon]# cat newtestfile.txt | grep 'inet addr:' | sed 's/^.*addr://g'
192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0
接下來則是刪除後續的部分,亦即: 192.168.1.100 Bcast:192.168.1.255 Mask:255.255.255.0,將 IP 後面的部分予以刪除:
[root@127-0-0-1 yoon]# cat newtestfile.txt | grep 'inet addr:' | sed 's/^.*addr://g' | sed 's/Bcast.*$//g'
192.168.1.100
多點編輯 sed -e 'cmd' -e 'cmd' filename
一條 sed 命令,將第三行到末尾的資料刪除,並將opterating替換成 newopterating:
[root@127-0-0-1 yoon]# nl testfile.txt
1 HELLO LINUX!
2 Linux is a free unix-type opterating system.
3 This is a linux testfile!
4 good good study!
5 hello world
6 Linux test
多條sed:
[root@127-0-0-1 yoon]# nl testfile.txt | sed '3,$d' | sed 's/opterating/newopterating/'
1 HELLO LINUX!
2 Linux is a free unix-type newopterating system.
一條sed:
[root@127-0-0-1 yoon]# nl testfile.txt | sed -e '3,$d' -e 's/opterating/newopterating/'
1 HELLO LINUX!
2 Linux is a free unix-type newopterating system.
( -e 表示多點編輯,第一個 -e 編輯第三行到最後一行刪除,第二個 -e 搜尋 opterating替換成 newopterating)
直接修改檔案內容
將 testfile 檔案中的每一行結尾為 . 修改為 !:
[root@127-0-0-1 yoon]# cat testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
Linux test.
[root@127-0-0-1 yoon]# sed 's/\.$/\!/g' testfile.txt
HELLO LINUX!
This is a linux testfile!
good good study!
hello world!
Linux test!
利用 sed 直接在最後一行輸入 #This is good !
[root@127-0-0-1 yoon]# sed -i '$a #This is good !' testfile.txt
[root@127-0-0-1 yoon]# cat testfile.txt
HELLO LINUX.
This is a linux testfile.
good good study.
hello world.
Linux test.
#This is good !
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-2683389/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux sed命令詳解Linux
- Linux重要命之sed命令詳解Linux
- sed命令使用詳解
- Linux sed命令常用操作詳解及案例!Linux
- sed 命令詳解及示例
- sed命令語法詳解
- Linux三劍客Awk、Sed、Grep 命令詳解Linux
- Linux 三劍客 Awk、Sed、Grep 命令詳解Linux
- Linux sed命令詳細說明Linux
- Linux sed 命令字串替換使用方法詳解Linux字串
- linux sed 命令Linux
- linux sed命令Linux
- LINUX命令-sedLinux
- shell程式設計-sed命令詳解(超詳細)程式設計
- Linux命令篇 - sed 命令Linux
- Sed 命令詳解 正規表示式元字元字元
- Linux sed命令用法Linux
- linux之 sed命令Linux
- Linux命令-Sed用法教程Linux
- linux sed []命令的作用Linux
- linux sed 命令引起的^M問題解決Linux
- sed指令使用詳解
- awk sed 用法詳解
- 《Linux下sed命令的使用》Linux
- 【轉】linux中的sed命令Linux
- Linux at命令詳解Linux
- Linux xargs 命令詳解Linux
- Linux awk 命令詳解Linux
- linux top 命令詳解Linux
- Linux diff命令詳解Linux
- Linux chattr命令詳解Linux
- Linux命令top詳解Linux
- Linux screen 命令詳解Linux
- Linux find 命令詳解Linux
- linux top命令詳解Linux
- linux命令詳解:sortLinux
- 【Linux】tcpdump命令詳解LinuxTCP
- linux tail 命令詳解LinuxAI