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


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

基本使用方法bash

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

OPTION{經常使用}工具

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

-i:直接修改源文件操作系統

-e SCRIPT -e SCRIPT:能夠同時執行多個腳本3d

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

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

Adressget

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

相關文章
相關標籤/搜索