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選項的作用是隻顯示我們要列印的行,無關緊要的內容不顯示。
1.1.2 列印所有行命令:sed -n '1,$'p passwd
1.1.3 指定一個區間列印 命令:sed -n '1,3'p passwd
2.1 列印包含某個字串的行
命令:sed -n '/root/'p passwd
類似於grep了,在grep中使用的特殊字元(如^、$、.、* 等)同樣也能在sed中使用
2.1.1 列印以1開頭的行 命令:sed -n '/^1/'p passwd
2.1.2 列印以in結尾的行 命令:sed -n '/in$/'p passwd
2.1.3 列印r和o之前有兩個任意符的行 命令:sed -n'/r..o/'p passwd
2.1.4 列印有零個或者多個ooo的行 命令:sed -n '/ooo*/'p passwd
3. -e 可以實現多個行為
命令:sed -e ‘1’p -e ‘/111/’p -n passwd 或
sed -e ‘1p;/111/p’ -n passwd
4、刪除某行或者多行(這裡的引數d表示刪除的動作,它不僅可以刪除指定的單行以及多行,而且可以刪除匹配某個字元的行,還可以刪除從某一行開始到文件最後一行的所有行。不過,這個操作僅僅是在顯示器螢幕上並不顯示這些行而已,
命令:sed '1'd passwd 或sed '1,3'd passwd
5、替換字元或字串
命令:sed '1,2s/ot/to/g' passwd \\把第一二行ot替換成to
(‘s’ 就是替換的命令, ‘g’ 為本行中全域性替換,如果不加 ‘g’ 只換該行中出現的第一個)
5.1 可以使用 ‘/’ 作為分隔符外,還可以使用其他特殊字元
例如 ‘#’ 或者 ‘@’ 都是可以的,命令: sed '1,2s#ot#to#g' passwd
5.2 文件中所有字母或者數字替換成空 (刪除文件中所有的數字或字母)
解釋:[0-9]表示任意的數字,[a-zA-Z]表示所有的大小寫字母或者[0-9a-zA-z]所有數字和字母
命令:sed 's/[a-zA-Z]//g' passwd 或者sed 's/[0-9]//g' passwd
6.調換兩個字串的位置
命令:sed's/\(rot\)\(.*\)\(bash\)/\3\2\1/'
小括號在sed中屬於特殊符號,必須在前面加轉義字元\,替換時則寫成類似\1、\2、或\3的形式。上例中用()把想要替換的字元打包成了一個整體。
有這個轉義字元\,會讓這個表示式看起來亂槽槽的,可以換一種方式省略它,如下所示
命令:sed -r's/(rot)(.*)(bash)/\3\2\1/' passwd (可以省略脫義符\)
就是加了這個-r選項讓這個表示式更加清晰了
6.1 除了調換兩個字串的位置,還可以使用sed在某一行前後增加指定內容,如下所示:
命令:sed 's/^.*$/123&/' passwd
7、直接修改檔案的內容(提前做好備份)
命令:sed-i's/ot/to/g' passwd
這樣可以直接把檔案修改,所以在修改前做好備份,最好先複製一下檔案以免改錯
轉載於:https://blog.51cto.com/404006045/2108262