1. 程式人生 > 實用技巧 >4月26日

4月26日

9.4-9.5 sed

其實grep工具的功能還不夠強大,它實現的只是查詢功能,而不能把查詢的內容替換,以前用vim操作文件的時候,可以查詢也可以替換,但只限於在文字內部操作,而不能輸出到螢幕上,sed工具就能把替換的文字輸出到螢幕上,而且還有其他更豐富的功能。sed是流式編輯器,是針對文件的行來操作的。

常用選項:

-n:把經過sed命令處理的行輸出到螢幕

-e:允許對輸入資料應用多條sed命令編輯

-i:用sed的修改結果直接修改讀取資料的檔案,而不是由螢幕輸出

-a:追加,在當前行後新增一行或多行

-c:行替換,用c後面的字串替換原資料行

-i:插入,在當期行前插入一行或多行

-d:刪除,刪除指定的行

-p:列印,輸入指定的行

-s:字串替換,用一個字串替換另外一個字串。格式為行範圍s/舊字串/新字串/g”

1.1 列印某行

命令格式:sed -n'n'p filesname

解釋:單引號內的n是一個數字,表示第幾行,-n選項的作用是隻顯示我們要列印的行,無關緊要的內容不顯示。

blob.png

1.1.2 列印所有行命令:sed -n '1,$'p passwd

blob.png

1.1.3 指定一個區間列印 命令:sed -n '1,3'p passwd

blob.png

2.1 列印包含某個字串的行

命令:sed -n '/root/'p passwd

blob.png

類似於grep了,在grep中使用的特殊字元(如^$.* 等)同樣也能在sed中使用

2.1.1 列印以1開頭的行 命令:sed -n '/^1/'p passwd

blob.png

2.1.2 列印以in結尾的行 命令:sed -n '/in$/'p passwd

blob.png

2.1.3 列印ro之前有兩個任意符的行 命令:sed -n'/r..o/'p passwd

blob.png

2.1.4 列印有零個或者多個ooo的行 命令:sed -n '/ooo*/'p passwd

blob.png

3. -e 可以實現多個行為

命令:sed -e ‘1’p -e ‘/111/’p -n passwd

sed -e ‘1p;/111/p’ -n passwd

blob.png

4、刪除某行或者多行(這裡的引數d表示刪除的動作,它不僅可以刪除指定的單行以及多行,而且可以刪除匹配某個字元的行,還可以刪除從某一行開始到文件最後一行的所有行。不過,這個操作僅僅是在顯示器螢幕上並不顯示這些行而已,

文件本身是沒有做刪除動作,不用擔心。)

命令:sed '1'd passwd sed '1,3'd passwd

blob.png

blob.png

5、替換字元或字串

命令:sed '1,2s/ot/to/g' passwd \\把第一二行ot替換成to

(‘s’ 就是替換的命令, ‘g’ 為本行中全域性替換,如果不加 ‘g’ 只換該行中出現的第一個)

blob.png

5.1 可以使用 ‘/’ 作為分隔符外,還可以使用其他特殊字元

例如 ‘#’ 或者 ‘@’ 都是可以的,命令: sed '1,2s#ot#to#g' passwd

blob.png

5.2 文件中所有字母或者數字替換成空 刪除文件中所有的數字或字母

解釋:[0-9]表示任意的數字,[a-zA-Z]表示所有的大小寫字母或者[0-9a-zA-z]所有數字和字母

命令:sed 's/[a-zA-Z]//g' passwd 或者sed 's/[0-9]//g' passwd

blob.png

blob.png

6.調換兩個字串的位置

命令:sed's/\(rot\)\(.*\)\(bash\)/\3\2\1/'

小括號sed中屬於特殊符號,必須在前面加轉義字元\,替換時則寫成類似\1\2、或\3的形式。上例中用()把想要替換的字元打包成了一個整體。

有這個轉義字元\,會讓這個表示式看起來亂槽槽的,可以換一種方式省略它,如下所示

命令:sed -r's/(rot)(.*)(bash)/\3\2\1/' passwd (可以省略脫義符\)

blob.png

就是加了這個-r選項讓這個表示式更加清晰了

blob.png

6.1 除了調換兩個字串的位置,還可以使用sed某一行前後增加指定內容,如下所示:

命令:sed 's/^.*$/123&/' passwd

blob.png

7、直接修改檔案的內容(提前做好備份)

命令:sed-i's/ot/to/g' passwd

blob.png

這樣可以直接把檔案修改,所以在修改前做好備份,最好先複製一下檔案以免改錯



轉載於:https://blog.51cto.com/404006045/2108262