激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Linux|Centos|Ubuntu|系統進程|Fedora|注冊表|Bios|Solaris|Windows7|Windows10|Windows11|windows server|

服務器之家 - 服務器系統 - Linux - 輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

2019-11-27 19:21Linux教程網 Linux

sed:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。能同時處理多個文件多行的內容,可以不對原文件改動,把整個文件輸入到屏幕,可以把只匹配到模式的內容輸入到屏幕上。還可以對原文件改動,但是不會

sed:Stream Editor文本流編輯,sed是一個“非交互式的”面向字符流的編輯器。能同時處理多個文件多行的內容,可以不對原文件改動,把整個文件輸入到屏幕,可以把只匹配到模式的內容輸入到屏幕上。還可以對原文件改動,但是不會再屏幕上返回結果。

sed命令的語法格式:

       sed的命令格式: sed [option]  'sed command'filename

sed的腳本格式:sed [option] -f  'sed  script'filename

sed命令的選項(option):

-n :只打印模式匹配的行
-e :直接在命令行模式上進行sed動作編輯,此為默認選項
-f :將sed的動作寫在一個文件內,用–f  filename 執行filename內的sed動作
-r :支持擴展表達式
-i :直接修改文件內容

sed在文件中查詢文本的方式:

1)使用行號,可以是一個簡單數字,或是一個行號范圍

 

x                                  

x為行號

x,y

表示行號從x到y

/pattern

查詢包含模式的行

/pattern   /pattern

查詢包含兩個模式的行

pattern/,x  

在給定行號上查詢包含模式的行

x,/pattern/  

通過行號和模式查詢匹配的行

x,y!  

查詢不包含指定行號x和y的行



輕松學會文本處理工具之二 linux sed命令

 


輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令



2)使用正則表達式、擴展正則表達式(必須結合-r選項)
 

 

^

錨點行首的符合條件的內容,用法格式"^pattern"

$

錨點行首的符合條件的內容,用法格式"pattern$"

^$

空白行

.

匹配任意單個字符

*

匹配緊挨在前面的字符任意次(0,1,多次)

.*

匹配任意長度的任意字符

\?

匹配緊挨在前面的字符0次或1次

\{m,n\}

匹配其前面的字符至少m次,至多n次

\{m,\}

匹配其前面的字符至少m次

\{m\}

精確匹配前面的m次\{0,n\}:0到n次          

\<

錨點詞首----相當于  \b,用法格式:\<pattern

\>

錨點詞尾,用法格式:\>pattern

\<pattern\>

單詞錨點

\(\)

分組,用法格式:\(pattern\),引用\1,\2

[]

匹配指定范圍內的任意單個字符

[^]

匹配指定范圍外的任意單個字符

[:digit:]

所有數字,  相當于0-9, [0-9]--->  [[:digit:]]

[:lower:]

所有的小寫字母

[:upper:]

所有的大寫字母

[:alpha:]

所有的字母

[:alnum:]

相當于0-9a-zA-Z

[:space:]

空白字符

[:punct:]

所有標點符號

 



 

復制代碼

代碼如下:


#######sed的匹配模式支持正則表達式##################### 
sed'5 q'/etc/passwd#打印前5行 
sed-n '/r*t/p'/etc/passwd#打印匹配r有0個或者多個,后接一個t字符的行 
sed-n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符 
sed-n '/o*/p'/etc/passwd#打印o字符重復任意次 
sed-n '/o\{1,\}/p'/etc/passwd#打印o字重復出現一次以上 
sed-n '/o\{1,3\}/p'/etc/passwd#打印o字重復出現一次到三次之間以上 

   

sed的編輯命令(sed command):

 

 

p

打印匹配行(和-n選項一起合用)

=

顯示文件行號

a\  

在定位行號后附加新文本信息

i\

在定位行號后插入新文本信息

d    

刪除定位行

c\  

用新文本替換定位文本

filename

寫文本到一個文件,類似輸出重定向 >

r    filename

從另一個文件中讀文本,類似輸入重定向  <

s

使用替換模式替換相應模式

q

第一個模式匹配完成后退出或立即退出

l

顯示與八進制ACSII代碼等價的控制符

{}

在定位行執行的命令組,用分號隔開

n  

從另一個文件中讀文本下一行,并從下一條命令而不是第一條命令開始對其的處理

N

在數據流中添加下一行以創建用于處理的多行組

g

將模式2粘貼到/pattern n/

y    

傳送字符,替換單個字符

 


對文件的操作無非就是”增刪改查“,怎樣用sed命令實現對文件的”增刪改查“,玩轉sed是寫自動化腳本必須的基礎之一。
sed命令打印文件信息(查詢):

 

復制代碼

代碼如下:


####用sed打印文件的信息的例子的命令###### 
sed -n '/^#/!p' /etc/vsftpd/vsftpd.conf 
sed -n '/^#/!{/^$/!p}' /etc/vsftpd/vsftpd.conf 
sed -e '/^#/d' -e '/^$/d' /etc/vsftpd/vsftpd.conf 
sed -n '1,/adm/p' /etc/passwd
sed -n '/adm/,6p' /etc/passwd
sed -n '/adm/,4p' /etc/passwd
sed -n '/adm/,2p' /etc/passwd
###以下圖片是對這些sed命令例子的解釋和顯示結果 

 

 

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令


sed命令實現對文件內容的添加:(對源文件添加的話就用-i參數): 

 

復制代碼

代碼如下:


####sed命令可以實現的添加###### 
#1)匹配行的行首添加,添加在同行 
#2)匹配行的行中的某個字符后添加 
#3)匹配行的行尾添加字符 
#4)匹配行的行前面行添加 
#5)匹配行的行后面行添加 
#6)文件的行首添加一行 
[root@jie1 ~]# sed -i '1 i\sed command start' myfile 
#7)文件的行尾追加一行 
[root@jie1 ~]# sed -i '$a \sed command end' myfile 

 

 

輕松學會文本處理工具之二 linux sed命令

 

輕松學會文本處理工具之二 linux sed命令

 

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

sed命令實現對文件內容的刪除:(對源文件直接刪除用-i參數):

sed的刪除操作是針對文件的行,如果想刪除行中的某個字符,那就用替換(別急,替換稍后就講,而且替換是sed最常用的)

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令

輕松學會文本處理工具之二 linux sed命令



重點:sed命令實現對文件內容的替換(替換是在shell自動化腳本中用到最多的操作) 

 

復制代碼

代碼如下:


#================源文件里面的內容=============================== 
[root@jie1 ~]# cat test 
anonymous_enable=YES 
write_enable=YES 
local_umask=022 
xferlog_enable=YES 
connect_from_port_20=YES 
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 
DEVICE="eth0" 
BOOTPROTO="static" 
HWADDR="00:0C:29:90:79:78" 
ONBOOT="yes" 
IPADDR=172.16.22.1 
NETMASK=255.255.0.0 
#====================================================================== 
[root@jie1 ~]# sed -i '/DEVICE/c\Ethernet' test 
#匹配DEVICE的行,替換成Ethernet這行 
[root@jie1 ~]# sed -i 's/static/dhcp/' test 
#把static替換成dhcp(/,@,#都是前面所說的地址定界符) 
[root@jie1 ~]# sed -i '/IPADDR/s@22\.1@10.12@' test 
#匹配IPADDR的行,把22.1替換成10.12由于.號有特殊意義所有需要轉義 
[root@jie1 ~]# sed -i '/connect/s#YES#NO#' test 
#匹配connect的行,把YES替換成NO 
[root@jie1 ~]# sed -i 's/bin/tom/2g' test 
#把所有匹配到bin的行中第二次及第二次之后出現bin替換成tom 
[root@jie1 ~]# sed -i 's/daemon/jerry/2p' test 
#把所有匹配到bin的行中第二次出現的daemon替換成jerry,并在生產與匹配行同樣的行 
[root@jie1 ~]# sed -i 's/adm/boss/2' test 
#把所有匹配到adm的行中僅僅只是第二次出現的adm替換成boss 
[root@jie1 ~]# sed -i '/root/{s/bash/nologin/;s/0/1/g}' test 
#匹配root的行,把bash替換成nologin,且把0替換成1 
[root@jie1 ~]# sed -i 's/root/(&)/g' test 
#把root用括號括起來,&表示引用前面匹配的字符 
[root@jie1 ~]# sed -i 's/BOOTPROTO/#BOOTPROTO/' test 
#匹配BOOTPROTO替換成#BOOTPROTO,在配置文件中一般用于注釋某行 
[root@jie1 ~]# sed -i 's/ONBOOT/#&/' test 
#匹配ONBOOT的行的前面添加#號,在配置文件中也表示注釋某行 
[root@jie1 ~]# sed -i '/ONBOOT/s/#//' test 
#匹配ONBOOT的行,把#替換成空,即去掉#號,也一般用作去掉#注釋 
#================執行以上sed命令之后文件顯示的內容==================== 
[root@jie1 ~]# cat test 
anonymous_enable=YES 
write_enable=YES 
local_umask=022 
xferlog_enable=YES 
connect_from_port_20=NO 
(root):x:1:1:(root):/(root):/bin/nologin 
bin:x:1:1:tom:/tom:/stom/nologin 
daemon:x:2:2:jerry:/sbin:/stom/nologin 
daemon:x:2:2:jerry:/sbin:/stom/nologin 
adm:x:3:4:boss:/var/adm:/sbin/nologin 
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 
Ethernet 
#BOOTPROTO="dhcp" 
HWADDR="00:0C:29:90:79:78" 
ONBOOT="yes" 
IPADDR=172.16.10.12 
NETMASK=255.255.0.0 

 

sed引用變量:(在自動化shell腳本 中也經常會使用到變量)

 

第一種當sed命令里面沒有默認的變量時可以把單引號改成雙引號;  
第二種當sed命令里面有默認的變量時,那自己定義的變量需要加單引號,且sed里面的語句必須用單引

 

復制代碼

代碼如下:


[root@jie1 ~]# cat >> myfile << EOF 
> hello world 
> i am jie 
> how are you 
> EOF #先生成一個文件 
[root@jie1 ~]# cat myfile 
hello world 
i am jie 
how are you 
[root@jie1 ~]# name=li 
#定義一個變量,且給變量賦值 
[root@jie1 ~]# sed -i "s/jie/$name/" myfile 
#把匹配jie的字符替換成變量的值 
[root@jie1 ~]# cat myfile 
hello world 
i am li 
how are you 
[root@jie1 ~]# sed -i "$a $name" myfile 
#當sed命令也有默認變量時,在去引用自己定義的變量會出現語法錯誤 
sed: -e expression #1, char 3: extra characters after command 
[root@jie1 ~]# sed -i '$a '$name'' myfile 
#在引用自定義的變量時,sed語句必須用單引引住,然后把自定義的變量也用單引號引住 
[root@jie1 ~]# cat myfile 
hello world 
i am li 
how are you 
li 
[root@jie1 ~]#

 

sed的其它高級使用:

1)把正在用sed操作的文件的內容寫到例外一個文件中

 

復制代碼

代碼如下:


[root@jie1 ~]# cat test #sed操作的文件中的內容 
Ethernet 
#BOOTPROTO="dhcp" 
HWADDR="00:0C:29:90:79:78"
ONBOOT="yes"
IPADDR=172.16.10.12 
NETMASK=255.255.0.0 
[root@jie1 ~]# sed -i 's/IPADDR/ip/w ip.txt' test 
#把sed操作的文件內容保存到另外一個文件中,w表示保存,ip.txt文件名 
[root@jie1 ~]# cat ip.txt #查看新文件的內容 
ip=172.16.10.12 
[root@jie1 ~]# 

 


2)讀取一個文件到正在用sed操作的文件中

 

復制代碼

代碼如下:


[root@jie1 ~]# cat myfile #文件內容 
hello world 
i am li 
how are you 
li 
[root@jie1 ~]# cat test #將用sed操作的文件的內容 
Ethernet 
#BOOTPROTO="dhcp" 
HWADDR="00:0C:29:90:79:78"
ONBOOT="yes"
IPADDR=172.16.10.12 
NETMASK=255.255.0.0 
[root@jie1 ~]# sed -i '/Ethernet/r myfile' test 
#在匹配Ethernet的行,讀進來另一個文件的內容,讀進來的文件的內容會插入到匹配Ethernet的行后 
[root@jie1 ~]# cat test #再次查看用sed命令操作的行 
Ethernet 
hello world 
i am li 
how are you 
li 
#BOOTPROTO="dhcp" 
HWADDR="00:0C:29:90:79:78"
ONBOOT="yes"
IPADDR=172.16.10.12 
NETMASK=255.255.0.0 
[root@jie1 ~]#

 

sed的經典例子:

 

復制代碼

代碼如下:


##1)、處理以下文件內容,將域名取出并進行計數排序,如處理: 
http://www.baidu.com/index.html 
http://www.baidu.com/1.html 
http://post.baidu.com/index.html 
http://mp3.baidu.com/index.html 
http://www.baidu.com/3.html 
http://post.baidu.com/2.html 
得到如下結果: 
域名的出現的次數 域名 
3 www.baidu.com 
2 post.baidu.com 
1 mp3.baidu.com 
[root@localhost shell]# cat file | sed -e ' s/http:\/\///' -e ' s/\/.*//' | sort | uniq -c | sort -rn 
3 www.baidu.com 
2 post.baidu.com 
1 mp3.baidu.com 
[root@codfei4 shell]# awk -F/ '{print $3}' file |sort -r|uniq -c|awk '{print $1"\t",$2}' 
3 www.baidu.com 
2 post.baidu.com 
1 mp3.baidu.com 
##2)、用grep結合sed取出網卡的ip地址 
[root@jie1 ~]# ifconfig | grep -B1 "inet addr" |grep -v "\-\-" |sed -n -e 'N;s/\(eth[0-9]\).*\n.*addr:\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*/\1 \2/p' 

 

學會sed的使用是寫自動化shell腳本的基礎,sed也是一個非常有用且重要的命令,是文本處理工具之一,以上是我自己學習總結的sed命令簡單的用法,sed還有更高級的用法,也還在學習中。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 18pao国产成人免费视频 | 久久久www视频 | 国产午夜亚洲精品理论片大丰影院 | 精品一区免费 | 98国内自拍在线视频 | 99re久久最新地址获取 | 亚洲国产高清自拍 | 久国久产久精永久网页 | 叶子楣成人爽a毛片免费啪啪 | 久久久国产精品成人免费 | 久久av一区二区 | 久草在线观看福利 | av在线免费网址 | 亚洲欧美日韩久久精品第一区 | 我爱我色成人网 | 成人免费av在线播放 | 五月天影院,久久综合, | 看一级毛片 | 欧美一级特黄特色大片免费 | 国产wwww | 国产精品成年片在线观看, 激情小说另类 | 在线中文字幕播放 | 国产一级中文字幕 | 久久久三级免费电影 | 国产一精品久久99无吗一高潮 | 亚洲国产综合在线观看 | 国产高潮失禁喷水爽到抽搐视频 | 亚洲欧美日韩免费 | 亚洲欧美国产高清 | 久久精热 | 九九精品视频免费 | 免费黄色日韩电影 | 一级黄色免费电影 | 99热99精品 | 欧美一区2区三区4区公司二百 | 有色视频在线观看 | 久久综合爱 | 国产精品hd免费观看 | 中文字幕一区二区三区四区 | 亚洲福利视 | 中文字幕在线观看网址 |