linux的sed工具使用介紹
sed工具的使用介紹
其實grep工具的功能還不夠強大,它實現的只是查找功能,而不能把查找的內容替換,以前用vim操作文檔的時候,可以查找也可以替換,但只限於在文本內部操作,而不能輸出到屏幕上,sed工具就能把替換的文本輸出到屏幕上,而且還有其他更豐富的功能。sed是流式編輯器,是針對文檔的行來操作的。
1. 打印某行
sed命令的格式為:sed -n ‘n‘p filename
解釋:單引號內的n是一個數字,表示第幾行,-n選項的作用是只顯示我們要打印的行,無關緊要的內容不顯示。
示例如下:
[root@aminglinux-01 grep]# sed -n ‘2‘p passwd bin:x:1:1:bin:/bin:/sbin/NOlogin
如果想打印所有行,可以使用命令sed -n ‘1,$‘p filename,示例如下:
[root@aminglinux-01 grep]# sed -n ‘1,$‘p test.txt rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
也可以指定一個區間打印,示例如下:
[root@aminglinux-01 grep]# sed -n ‘1,$‘p test.txt rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
2. 打印包含某個字符串的行:
示例如下:
[root@aminglinux-01 sed]# sed -n ‘/root/‘p test.txt root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
這種方法就類似於grep了,在grep中使用的特殊字符(如^、$、.、*等)同樣也能在sed中使用,如下所示:
[root@aminglinux-01 sed]# sed -n ‘/^1/‘p /root/grep/test.txt 1111111111111111111111111111111 [root@aminglinux-01 sed]# sed -n ‘/in$/‘p /root/grep/test.txt operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin [root@aminglinux-01 sed]# sed -n ‘/r..o/‘p /root/grep/test.txt operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash [root@aminglinux-01 sed]# sed -n ‘/ooo*/‘p /root/grep/test.txt operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash
sed命令加上-e選項可以實現多個行為,如下所示:
[root@aminglinux-01 sed]# sed -e ‘1‘p -e ‘/111/‘p -n /root/grep/test.txt rot:x:o:o:/rot:/bin/bash 1111111111111111111111111111111
3. 刪除某些行
示例如下:
[root@aminglinux-01 sed]# sed ‘1‘d /root/grep/test.txt operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘1,3‘d /root/grep/test.txt roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘/oot/‘d /root/grep/test.txt rot:x:o:o:/rot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
解釋:這裏的參數d表示刪除的動作,它不僅可以刪除指定的單行以及多行,而且可以刪除匹配某個字符的行,還可以刪除從某一行開始到文檔最後一行的所有行。不過,這個操作僅僅是在顯示器屏幕上並不顯示這些行而已,文檔還是好好的,不用擔心。
4. 替換字符或者字符串
示例命令如下:
[root@aminglinux-01 sed]# cat /root/grep/test.txt //原先文件 rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘1,2s/ot/to/g‘ /root/grep/test.txt //執行命令後的文件,仔細看兩者之間的不同。 rto:x:o:o:/rto:/bin/bash operator:x:11:o:operator:/roto:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
解釋:上例中的參數s就表示替換的動作,參數g表示本行全局替換,如果不加g則只替換本行出現的第一個,這個用法其實各vim的替換大同小異。
###### 擴展知識: 除了可以使用/作為分隔符外,我們還可以使用其他特殊字符,例如#和@,如下所示:
[root@aminglinux-01 sed]# cat /root/grep/test.txt //原先文件 rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘1,2s/ot/to/g‘ /root/grep/test.txt //執行命令後的文件,仔細看兩者之間的不同。 rto:x:o:o:/rto:/bin/bash operator:x:11:o:operator:/roto:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
那我們思考下,如何刪除文檔中所有的數字或字母?示例命令如下:
[root@aminglinux-01 sed]# sed ‘s/[0-9]//g‘ /root/grep/test.txt rot:x:o:o:/rot:/bin/bash operator:x::o:operator:/root:/sbin/nologin operator:x::o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash
解釋:[0-9]表示任意的數字,這裏你也可以寫成[a-zA-Z]或者[0-9a-zA-z]。如下所示:
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘s/[a-zA-Z]//g‘ /root/grep/test.txt ::::/:// ::11:::/:// ::11:::/:// ::::/:// 1111111111111111111111111111111
5. 調換兩個字符串的位置
示例如下:
[root@aminglinux-01 sed]# cat /root/grep/test.txt //查看原文件 rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed ‘s/\(rot\)\(.*\)\(bash\)/\3\2\1/‘ /root/grep/test.txt bash:x:o:o:/rot:/bin/rot operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
解釋:小括號在sed中屬於特殊符號,必須在前面加轉義字符\,替換時則寫成類似\1、\2、或\3的形式。上例中用()把想要替換的字符打包成了一個整體。
有這個轉義字符\,會讓這個表達式看起來亂槽槽的,可以換一種方式省略它,如下所示:
[root@aminglinux-01 sed]# sed -r ‘s/(rot)(.*)(bash)/\3\2\1/‘ /root/grep/test.txt bash:x:o:o:/rot:/bin/rot operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
從這裏可以看出,就是這個-r選項讓這個表達式更加清晰了。除了調換兩個字符串的位置,還可以使用sed在某一行前後增加指定內容,如下所示:
[root@aminglinux-01 sed]# sed ‘s/^.*$/123&/‘ /root/grep/test.txt 123rot:x:o:o:/rot:/bin/bash 123operator:x:11:o:operator:/root:/sbin/nologin 123operator:x:11:o:operator:/rooot:/sbin/nologin 123roooot:x:o:o:/roooooot:/bin/bash 1231111111111111111111111111111111 123aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
6. 直接修改文件的內容
示例如下:
[root@aminglinux-01 sed]# cat /root/grep/test.txt rot:x:o:o:/rot:/bin/bash operator:x:11:o:operator:/root:/sbin/nologin operator:x:11:o:operator:/rooot:/sbin/nologin roooot:x:o:o:/roooooot:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa [root@aminglinux-01 sed]# sed -i ‘s/ot/to/g‘ /root/grep/test.txt [root@aminglinux-01 sed]# cat /root/grep/test.txt rto:x:o:o:/rto:/bin/bash operator:x:11:o:operator:/roto:/sbin/nologin operator:x:11:o:operator:/rooto:/sbin/nologin roooto:x:o:o:/roooooto:/bin/bash 1111111111111111111111111111111 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
解釋:這樣就可以直接修改test.txt文件中的內容了,但必須註意,在修改前最好先備份一個文件,以免改錯。
本文出自 “Gary博客” 博客,請務必保留此出處http://taoxie.blog.51cto.com/10245493/1983919
linux的sed工具使用介紹