文本處理三劍客-sed

1.文本處理三劍客-sed

#sed語法:
sed  [OPTION]...  {script-only-if-no-other-script}
       [input-file]...

sed理解:是一種流編輯器,一次處理一行內容,處理時把當前處理的行存儲在臨時緩存中,成為“模式空間”,接著用sed命令處理緩沖區的內容,處理完畢后吧緩沖區內容輸出到屏幕接著處理下一行。這樣不斷重復到末尾。文件內容并沒有改變。除非使用重定向輸出才會改變內容。

 常用選項

-n 不輸出模式空間到屏幕
-e 多點編輯,或
-f 從指定文件中讀取編輯腳本
-r 使用擴展表達式
-i 原處編輯

2.sed處理地址范圍定界:

1. 不給地址表示對全文處理


2. 單地址 指定行 ‘1‘ 第一行 ;

/ 關鍵字,可以是正則表達式或其他模糊匹配的符號/


3. 地址范圍

'2,10'第二行到第十行 

’2,+10‘第二行再加10行 

/關鍵字/,/關鍵字/匹配第一個關鍵字到第二個關鍵字之間的內容 ;


4. 步進 

’1~2‘奇數行  

’2~2’偶數行

3.sed編輯命令

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

[root@localhost testdir]# sed '1d' 1
     2	#
     3	# /etc/fstab
     4	# Created by anaconda on Thu Jul 28 17:47:00 2016


p 顯示模式空間中的內容

[root@localhost ~]# sed '2p' /etc/issue
\S
Kernel \r on an \m
Kernel \r on an \m

顯示兩次的原因因為在模式空間輸出一次然后p顯示一次,加上-n是表示不輸出模式空間到屏幕,如下輸出


[root@localhost ~]# sed '2p' /etc/issue
\S
Kernel \r on an \m


a \添加內容 在匹配行后加入文本 \n多行插入

#實例解釋
[root@localhost testdir]# sed -e  /UUID/a\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -e /UUID/i\ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ  file1
     1	
     2	#
     3	# /etc/fstab
     4	# Created by anaconda on Thu Jul 28 17:47:00 2016
     5	#
     6	# Accessible filesystems, by reference, are maintained under '/dev/disk'
     7	# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
     8	#
     9	/dev/mapper/centos-root /                       xfs     defaults        0 0
ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ
    10	UUID=aea23617-8678-414a-bd12-59f03ea9deb0 /boot                   xfs     defaults        0 0
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

i \添加內容  在匹配行后加入文本 \n多行插入

#實例解釋
[root@localhost testdir]# sed '/^U/i\ZZZZZZZZZZZZZZZZZZZZZ\nNNNNNNNNNNNNNNNNNNNNNN\nssssssssssssssss' file3
#輸出結果
ZZZZZZZZZZZZZZZZZZZZZ
NNNNNNNNNNNNNNNNNNNNNN
ssssssssssssssss
UUID=aea23617-8678-414a-bd12-59f03ea9deb0 /boot

        

c \替換內容 替換單行或多行文本

#實例解釋,也支持\n換行
[root@localhost testdir]# sed '/^U/c\relace' file3
#將以U打頭的行替換成‘relace’

w /保存新文件路徑

[root@localhost testdir]# sed '/^U/w /testdir/5' file3

r /保存文件路徑

[root@localhost testdir]# sed '/^U/r /etc/issue' file3

= 在模式空間中打印行號

[root@localhost testdir]# sed '/^U/=' file6

!模式空間匹配到的取反

[root@localhost testdir]# sed '/^U/!=' file6

#ps:sed文件出是不修改原文件內容的,如果要修改可以使用選項-i

[root@localhost testdir]# sed -i '/^U/d' 3

修改之前可以將文件進行備份,在-i選項后面添加備份名可以在修改之前備份該文件

[root@localhost testdir]# sed -i.bak '/^U/d' 3

4.sed搜索替換

s/// 查找替換 支持使用分割符包括s@@@,s### 替換標記;
g:全局替換
p:顯示替換成功的行
w 將替換成功的行保存至新文件
#實例操作解釋
#1、刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
[root@localhost testdir]# sed '/^[[:space:]]\+/d' /etc/grub2.cfg 
#2、刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
[root@localhost testdir]# sed 's/^#[[:space:]]\+//' /etc/fstab
#3、在/root/install.log每一行行首增加#號
[root@centos6 ~]# sed -n 's/^/#/p' /root/install.log
#4、在/etc/fstab文件中不以#開頭的行的行首增加#號
[root@centos6 ~]# sed 's/^[^#]/#/' /etc/fstab
#5、處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
取基名
echo "/etc/fst/sd" | sed -r  's@(.*)/([^/]+/?)@\2@'
echo "/etc/fst/sd" | sed   -r 's@(.*/)([^/]+/?)$@\1@' 
echo "/etc/fst/sd/" | sed  's@.*\<@@'
取目錄
echo "/etc/fst/sd/" | sed -r  's#[^/]+/?$##'
#6、利用sed 取出ifconfig命令中本機的IPv4地址
[root@centos6 ~]# ifconfig|sed -n '2p'|sed 's/\<B.*//'|sed 's/^.*r:'//
#7、統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數
[root@centos6 Packages]# ls |sed 's/.rpm$'//|sed 's/.*\.'//|sort|uniq -c

5.sed高級應用

首先要了解使用sed兩個緩存空間,一個是模式空間,在前面已經說過了

另一個是保持空間

下面幾個是sed的高級應用

h: 把模式空間中的內容覆蓋至保持空間中

H:把模式空間中的內容追加至保持空間中

g: 從保持空間取出數據覆蓋至模式空間

G:從保持空間取出內容追加至模式空間

x: 把模式空間中的內容與保持空間中的內容進行互換

n: 讀取匹配到的行的下一行覆蓋至模式空間

N:追加匹配到的行的下一行至模式空間

d: 刪除模式空間中的行

D:刪除當前模式空間開端至\n的內容(不在傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

#實例解釋以后補充

原創文章,作者:snowbamboo,如若轉載,請注明出處:http://www.www58058.com/33576

(0)
snowbamboosnowbamboo
上一篇 2016-08-12 09:01
下一篇 2016-08-12 09:01

相關推薦

  • Linux的主要發行版及區別

    Linux的主要發行版介紹 主流的發行版 Linux至上世紀90年代基于Unix而誕生,至今其發行版有幾百種之多,但其主流的發行版有三個系列。 Debian系 Ubuntu屬于Debinan系。 Redhat系CentOS屬于Redhat系。Slackware系SUSE Linux即屬于Slackware系。 主要區別 軟件包管…

    Linux干貨 2016-10-29
  • linux 邏輯卷管理

    lvm介紹:     lvm:全稱Logical Volume Manager,重點在于可以彈性調整filesystem 容量,并非在于數據安全     lvm:整合多個分區或者磁盤為一個整體,讓分區看起來想一個整體。     lvm:設備…

    Linux干貨 2016-09-01
  • wordpress和discuz的負載均衡(lvs-nat)

    實驗目的:利用lvs-nat模型實現wordpress和discuz的負載均衡 實驗要求:客戶端訪問wordpress或Discuz服務時,無論被調度至哪臺RS上,其會話和訪問的頁面都應保持一致; 實驗環境:一臺server用作VS(需要兩塊網卡,eth1連接內部網絡,eth0連接外部網絡),兩臺server用作RS,一臺server用于部署mysql、NF…

    2017-05-13
  • 全球敏捷運維峰會Gdevops 2017成都站嘉賓主題提前看!

    2017年全球敏捷運維峰會(Gdevops, Global Devops Summit)將于2017年在成都、上海、北京、廣州四城全面啟動,本次峰會由上海市經濟和信息化委員會指導,上海市云計算產業促進中心、DBAplus社群主辦,數十家媒體單位共同支持,活動家提供全球敏捷運維峰會在線報名服務。 成都站即將于13日啟航,搭車地址:https://www.huo…

    Linux干貨 2017-05-11
  • Linux第二周學習博客作業

    對第二周學習的內容進行總結

    Linux干貨 2017-12-10
欧美性久久久久