漫漫運維路——Linux文本處理三劍客之sed


Sed,即Stream EDitor的縮寫,是Linux操作系統中常見的文本處理工具,可以結合正則表達式簡單方便地對文本進行處理。本文將以實例的方式介紹sed的基本用法。

基本使用方法

基本語法:sed [OPTION] [AddressCommand] FILE1 FILE2......

OPTION{常用}

-n:靜默模式,不顯示模式空間

-i:直接修改源文件

-e SCRIPT -e SCRIPT:可以同時執行多個腳本

-f /APATH/TO/SED_FILE:從文件中讀取腳本,執行

-r:表示支持擴展正則表達式

Adress

1.StartLineEndline

如:1,100

2./RegExp/

/^root/:匹配以root開始的行

/$/:最後一行

3./pattern1//pattern2/:從第一次被模式1匹配到的行到第一次被模式2匹配到的行

4.LineNumber

指定的行

5.StartLine+N

StartLine開始,向後的N

Command

d:刪除匹配到的行

例:刪除/etc/fstab文件中的前三行文本

[root@localhost tmp]# sed '1,+2d' /etc/fstab

p:顯示符合條件的行,被匹配到的行會顯示兩次,未被匹配到的行只顯示一次

例:只顯示/etc/fstab文件中以#開頭的行

[root@localhost tmp]# sed -n '/^#/p' /etc/fstab

a \string 在匹配到的行後面增加行

例:在文件/etc/fstab文件中以#開頭的行後面插入hahah這一行

[root@localhost tmp]# sed '/^#/a\hahaha' /etc/fstab

i \string 用法同a,在符合條件的行前面添加新行

r FILE後接文件,在匹配到的行後讀入文件中的內容

例:在/etc/fstab文件中的第一行和第二行讀入文件/etc/passwd

[root@localhost tmp]# sed '1,2r/etc/passwd' /etc/fstab 

w FILE:將地址指定的範圍內的行另存至指定的文件中

例:將溫江/etc/fstab中的第一行和第二行保存到/tmp/fstab文件中

[root@localhost tmp]# sed '1,2w/tmp/fstab' /etc/fstab

s/pattern/string/[修飾符:查找替換,默認只替換每行中第一次被模式匹配到的字符串

修飾符:

g:全局替換

i:忽略大小寫

例:把文件test.txt中以o結尾的字符後面加d

[root@localhost tmp]# sed 's@\(o$\)@\1d@g' test.txt

例:去掉history命令的行首的所有空格

[root@localhost tmp]# history | sed 's@^[[:space:]]*@@g'

綜合實例

1:刪除/etc/grub.conf文件中行首的空白字符

[root@localhost tmp]# sed 's@^[[:space:]]*@@' /etc/grub.conf


wKioL1VUxGvBEgEaAAQjuweaXhs342.jpg

 

2:替換/etc/inittab文件中id3initdefault一行中的數字爲5

[root@localhost tmp]# sed 's/id:3:initdefault:\(.*\)/id:5:initdefault"\1/g' /etc/inittab


wKioL1VUxI_h1KJsAAD78UjnniM237.jpg

3:刪除/etc/inittab文件中的空白行

[root@localhost tmp]# sed '/^$/d' /etc/inittab


wKioL1VUxKbTDZ8nAAI1y-SNJUg468.jpg

 

4:刪除/etc/inittab文件中開頭的#

[root@localhost tmp]# sed 's/^#//' /etc/inittab


wKiom1VUw0TiBSlOAAEXA9jdrhs004.jpg

 

5:刪除某文件中開頭的#號但要求#號後面必須有空白字符

原文件內容如下


wKioL1VUxNbCRpoTAACO-D6-Uv0667.jpg

 

[root@localhost tmp]# sed 's/#*\([[:space:]]\+\)/\1/' test.txt


wKiom1VUw3XS50H9AADDjm8jOlY872.jpg

 

6:刪除某文件中以空白字符後面跟#號的行中的開頭的空白字符及#


wKiom1VUw4vAdkYtAAF3p-vL-Rg864.jpg

7:取出一個文件路徑的目錄名稱

[root@localhost tmp]# echo "/etc/yum.repo/new.repo" | sed 's@/.*/\(.*\)/.*@\1@'


wKiom1VUw6Xjf6WOAAHgBly3P8k414.jpg

 

 

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章