文本三劍客—sed 基礎

文本三劍客—sed 基礎

       sed編輯器被稱作流編輯器(stream editor),和普通的交互式文本編輯器恰好相反。在交互式文本編輯器中(比如vim),你可以用鍵盤命令來交互式的插入、刪除或者替換數據中的文本。流編輯器則會自愛編輯器處理數據之前基于預習提供的一組規則來編輯數據流。

sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行輸入,要么存儲在一個命令文件中。sed會執行下列操作:

(1)一次從輸入中讀取一行數據。

(2)根據所提供的編輯器命令匹配數據

(3)安裝命令修改流中的數據

(4)將新的數據輸出到STDOUT

在流編輯器將所有命令與一行數據匹配完畢后,它會讀取下一行數據并重復這個過程。在流編輯器處理完流中的所有數據行后,它就會終止。

由于命令是按順序逐行執行的,sed編輯器只需對數據流進行以便處理就可以完成編輯操作。這使得sed編輯器要比交互式編輯器快得多,可以快速完成對數據的自動修改。

用法

sed [option]… ‘script’ intputfile

1 常用選項

-n:不輸出模式空間內容到屏幕,既不自動打印

-e:多點編輯

-f:/PATH/SCRIPT_FILE:從指定文件中讀取編輯腳本

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

-i.bak:備份文件并原處編輯

script:

“地址命令”

2 地址定界

(1)不給地址:對全文進行處理

(2)單地址:

#:指定的行

/pattern/:被此處模式所能夠匹配到的每一行

(3)地址范圍

#,#

#,+#

/pat1/,/pat2/

#,/pat1/

(4)~:步進

1~2 奇數行

2~2 偶數行

3 基本編輯命令

d:刪除模式空間匹配的行

p:顯示模式空間中的內容

a[]text:在指定行后面追加文本,支持使用n實現多行追加

i[]text:在行前面插入文本

c[]text:替換行為單行或多行文本

w /path/somefile:保存模式匹配的行至指定文件

r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后

= :為模式空間中的行打印行號

! :模式空間中匹配行取反處理

s/oldstr/newstr/:查找替換,支持使用其它分隔符,s@@@,s###

替換標記:

g:行內全局替換

p:顯示替換成功的行

w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

4 常用命令

(1)打印第N行

[root@local ~]# sed -n '2p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin

(2)打印第N至M行

[root@local ~]# sed -n '1,4p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

(3)打印所有包含關鍵字string的行

[root@local ~]# sed -n '/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

(4)打印從第N行開始到有關鍵字string 的行

[root@local ~]# sed -n '1,/root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

(5)顯示空行行號

[root@local ~]# sed -n '/^$/=' /etc/fstab
1

(6)在關鍵字行后追加文字

[root@local ~]# sed '/root/asuperman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
operator:x:11:0:operator:/root:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(7)在關鍵字string行前追擊文字

[root@local ~]# sed '/root/isuperman' /etc/passwd
superman
root:x:0:0:root:/root:/bin/bash
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[……]

(8)替換行為單行或多行文本

[root@local ~]# sed '/root/csuperman' /etc/passwd
superman
bin:x:1:1:bin:/bin:/sbin/nologin
[……]
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
superman
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[……]

(9)刪除指定行

[root@local ~]# sed '1,10d' /etc/passwd
或[root@local ~]# cat -n /etc/passwd |sed '1,10d'
11    games:x:12:100:games:/usr/games:/sbin/nologin
12    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13    nobody:x:99:99:Nobody:/:/sbin/nologin
14    avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin

(10)在指定行后追加文字

[root@local ~]# nl /etc/passwd |sed '2a tea'
1    root:x:0:0:root:/root:/bin/bash
2    bin:x:1:1:bin:/bin:/sbin/nologin
tea
3    daemon:x:2:2:daemon:/sbin:/sbin/nologin

(11)在關鍵字后追加文本

[root@local ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

(12)在關鍵字前追擊文本

[root@local ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

(13)全局查找替換

[root@local ~]# sed 's/UUID/hahaha/g' /etc/fstab
[……]
hahaha=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(14)使用多個編輯器命令

[root@local ~]# sed -e 's/UUID/hahaha/g' -e 's/=/###/g' /etc/fstab
[……]
hahaha###227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
hahaha###7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
hahaha###12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(15)修改前備份

先把/etc/fstab復制到當前目錄下,以防止直接修改

[root@local ~]# cp /etc/fstab .
[root@local ~]# sed -i.bak 's/=/$$$$$/g' fstab
[root@local ~]# cat fstab fstab.bak
[……]
UUID$$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID$$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID$$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0
[……]
UUID=227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
UUID=7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
UUID=12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

(16)從文件中讀取編輯命令

[root@local ~]# cat script1.sed
s/=/$$$$/
s/UUID/mytest/
[root@local ~]# sed -f script1.sed fstab
[……]
mytest$$$$227a3d28-7318-4a4d-8b1e-e076460506b8 / xfs defaults 0 0
mytest$$$$7ea2bade-f418-4d0a-93cd-b413406e604e /boot xfs defaults 0 0
mytest$$$$12e75d1f-a8e4-4663-afb7-a018beae1e52 swap swap defaults 0 0

原創文章,作者:linux is not unix,如若轉載,請注明出處:http://www.www58058.com/75703

(0)
linux is not unixlinux is not unix
上一篇 2017-05-15
下一篇 2017-05-15

相關推薦

  • shell的變量功能

                                                      &nbsp…

    2017-08-05
  • MAN手冊各章節功能介紹及快捷鍵鍵位整理

       初學linux ,請教別人的時候,遇到人不耐煩回答我等菜菜的問題,都會說一句,“自己去man”,“翻過man了嗎,再來問吧”,哦,my gd,這個man到底是何方超人啊,其實man就是linux自帶的文檔,假如你不知道ls這個命令的用法,你可以試著敲入 man  ls  ,然后來看看,會有啥結果。效果不錯吧,一般…

    Linux干貨 2016-10-18
  • nginx狀態監控

    通過查看Nginx的并發連接,我們可以更清除的知道網站的負載情況。Nginx并發查看有兩種方法(之所以這么說,是因為筆者只知道兩種),一種是通過web界面,一種是通過命令,web查看要比命令查看顯示的結果精確一些。下面介紹這兩種查看方法 No1、通過瀏覽器查看 通過web界面查看時Nginx需要開啟status模塊,也就是安裝Nginx時加上 &n…

    Linux干貨 2016-10-19
  • Cent OS 6 編譯方式安裝LAMP

    細節要求: (1) 三者分離于三臺主機; (2) 一個虛擬主機用于提供phpMyAdmin;另一個虛擬主機用于提供wordpress; (3) PHP使用FastCGI+xcache; (4) httpd使用非prefork的mpm模式; 一、CentOS6環境準備 1、OS(CentOS6.8)下開發環境包的安裝,編譯安裝程序包需要使用 #yum grou…

    Linux干貨 2017-02-24
  • rpm詳解

    rpm詳解 rpm詳解 rpm使用方法 rpm起源 rpm是什么 rpm命名格式 rpm優缺點 rpm獲取注意 rpm命令使用 rpm起源  由于在linux中安裝應用程序需要源碼包編譯安裝,對于非專業人員而言難度太大,因而出現一種將源碼編譯好的二進制程序,庫文件,配置文件,幫助文件等打包成一個或多個特定格式的程序包,而管理這類包的工具之一,則稱為…

    Linux干貨 2016-12-23
欧美性久久久久