1. 程式人生 > >4月26日

4月26日

linux

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 打印ro之前有兩個任意符的行 命令: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

技術分享圖片

這樣可以直接把文件修改,所以在修改前做好備份,最好先復制一下文件以免改錯



4月26日