LINUX 之 SED 使用
Sed是Stream Editor(流編輯器)縮寫,是操作、過濾和轉換文字內容的強大工具。常用功能有增刪改查,過濾,取行。
[[email protected] ~]# sed --version #→ sed軟體版本
GNU sed version 4.2.1
語法格式
sed [options] [sed-commands] [input-file]
sed [選項] [sed命令] [輸入檔案]
說明:
1. 注意sed和後面的選項之間至少有一個空格。
2. 為了避免混淆,本文稱呼sed為sed軟體。sed-commands(sed命令)是sed軟體內建的一些命令選項,為了和前面的options(選項)區分,故稱為sed命令。
3. sed-commands既可以是單個sed命令,也可以是多個sed命令組合。
4. input-file(輸入檔案)是可選項,sed還能夠從標準輸入如管道獲取輸入。
命令執行流程
概括流程:Sed軟體從檔案或管道中讀取一行,處理一行,輸出一行;再讀取一行,再處理一行,再輸出一行……
模式空間:sed軟體內部的一個臨時快取,用於存放讀取到的內容。
使用範例
1. 統一實驗文字
# 建立包含下面內容的檔案,後面的操作都會使用這個檔案。
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2. 增刪改查
2.1 增
- a 追加文字到指定行後
- i 插入文字到指定行前
2.1.1 單行增加
[[email protected] ~]# sed '2a 106,dandan,CSO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2i 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.1.2 多行增加
[[email protected] ~]# sed '2a 106,dandan,CSO\n107,bingbing,CCO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO #→第1種寫法
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2a 106,dandan,CSO \
> 107,bingbing,CCO' person.txt
101,oldboy,CEO
102,zhangyao,CTO
106,dandan,CSO #→第2種寫法
107,bingbing,CCO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
#→sed命令i的使用方法是一樣的,因此不再列出。
企業案例1:優化SSH配置(一鍵完成增加若干引數)
在我們學習系統優化時,有一個優化點:更改ssh服務遠端登入的配置。主要的操作是在ssh的配置檔案加入下面5行文字。(下面引數的具體含義見其他課程。)
Port 52113
PermitRootLogin no
PermitEmptyPasswords no
UseDNS no
GSSAPIAuthentication no
我們可以使用vi命令編輯這個文字,但這樣就比較麻煩,現在想一條命令增加5行文字到第13行前?
指定執行的地址範圍
sed軟體可以對單行或多行進行處理。如果在sed命令前面不指定地址範圍,那麼預設會匹配所有行。
用法:n1[,n2]{sed-commands}
地址用逗號分隔的,n1,n2可以用數字、正則表示式、或二者的組合表示。
例子:
10{sed-commands} 對第10行操作
10,20{sed-commands} 對10到20行操作,包括第10,20行
10,+20{sed-commands} 對10到30(10+20)行操作,包括第10,30行
1~2{sed-commands} 對1,3,5,7,……行操作
10,${sed-commands} 對10到最後一行($代表最後一行)操作,包括第10行
/oldboy/{sed-commands} 對匹配oldboy的行操作
/oldboy/,/Alex/{sed-commands} 對匹配oldboy的行到匹配Alex的行操作
/oldboy/,${sed-commands} 對匹配oldboy的行到最後一行操作
/oldboy/,10{sed-commands} 對匹配oldboy的行到第10行操作,注意:如果前10行沒有匹配到oldboy,sed軟體會顯示10行以後的匹配oldboy的行,如果有。
1,/Alex/{sed-commands} 對第1行到匹配Alex的行操作
/oldboy/,+2{sed-commands} 對匹配oldboy的行到其後的2行操作
2.2 刪
d 刪除指定的行
[[email protected] ~]# sed 'd' person.txt
[[email protected] ~]#
[[email protected] ~]# sed '2d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '2,5d' person.txt
101,oldboy,CEO
[[email protected] ~]# sed '3,$d' person.txt
101,oldboy,CEO
102,zhangyao,CTO
[[email protected] ~]# sed '1~2d' person.txt
102,zhangyao,CTO
104,yy,CFO
[[email protected] ~]# sed '1,+2d' person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/zhangyao/d' person.txt
101,oldboy,CEO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/oldboy/,/Alex/d' person.txt
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed '/oldboy/,3d' person.txt
104,yy,CFO
105,feixue,CIO
企業案例2:列印檔案內容但不包含oldboy
[[email protected] ~]# sed '/oldboy/d' person.txt #→刪除包含"oldboy"的行
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.3 改
2.3.1 按行替換
c 用新行取代舊行
[[email protected] ~]# sed '2c 106,dandan,CSO' person.txt
101,oldboy,CEO
106,dandan,CSO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
2.3.2 文字替換
s:單獨使用→將每一行中第一處匹配的字串進行替換 ==>sed命令
g:每一行進行全部替換 ==>sed命令s的替換標誌之一,非sed命令
-i:修改檔案內容 ==>sed軟體的選項
sed軟體替換模型(方框▇被替換成三角▲)
sed -i 's/▇/▲/g' oldboy.log
sed -i 's#▇#▲#g' oldboy.log
觀察特點
- 兩邊是引號,引號裡面的兩邊分別為
s
和g
,中間是三個一樣的字元/
或#
作為定界符。#
能在替換內容包含/
有助於區別。定界符可以是任意符號如:
或|
等,但當替換內容包含定界符時,需轉義即:
|
。經過長期實踐,建議大家使用#
作為定界符。 - 定界符
/
或#
,第一個和第二個之間的就是被替換的內容,第二個和第三個之間的就是替換後的內容。 s#▇#▲#g
,▇能用正則表示式,但▲不能用,必須是具體的。- 預設sed軟體是對模式空間(記憶體中的資料)操作,而-i選項會更改磁碟上的檔案內容。
[[email protected] ~]# sed 's#zhangyao#oldboyedu#g' person.txt
101,oldboy,CEO
102,oldboyedu,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed -i 's#zhangyao#BBB#g' person.txt
[[email protected] ~]# cat person.txt
101,oldboy,CEO
102,BBB,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed -i 's#oldboyedu#zhangyao#g' person.txt #→還原測試檔案
企業案例3:指定行修改配置檔案
指定行精確修改配置檔案,這樣可以防止修改多了地方。
[[email protected] ~]# sed '3s#0#9#' person.txt
101,oldboy,CEO
102,zhangyao,CTO
193,Alex,COO
104,yy,CFO
105,feixue,CIO
2.3.3 變數替換
[[email protected] ~]# cat test.txt #→再新建一個文字
a
b
a
[[email protected] ~]# x=a
[[email protected] ~]# y=b
[[email protected] ~]# echo $x $y
a b
[[email protected] ~]# sed s#$x#$y#g test.txt
b
b
b
[[email protected] ~]# sed 's#$x#$y#g' test.txt
a
b
a
[[email protected] ~]# sed 's#'$x'#'$y'#g' test.txt
b
b
b
[[email protected] ~]# sed "s#$x#$y#g" test.txt
b
b
b
[[email protected] ~]# eval sed 's#$x#$y#g' test.txt
b
b
b
2.3.4 分組替換\( \)
和\1
的使用說明
sed軟體的\( \)
的功能可以記住正則表示式的一部分,其中,\1
為第一個記住的模式即第一個小括號中的匹配內容,\2
第二記住的模式,即第二個小括號中的匹配內容,sed最多可以記住9個。
例:echo I am oldboy teacher.
如果想保留這一行的單詞oldboy,刪除剩下的部分,使用圓括號標記想保留的部分。
[[email protected] ~]# echo I am oldboy teacher. |sed 's#^.*am \([a-z].*\) tea.*$#\1#g'
oldboy
[[email protected] ~]# echo I am oldboy teacher. |sed -r 's#^.*am ([a-z].*) tea.*$#\1#g'
oldboy
[[email protected] ~]# echo I am oldboy teacher. |sed -r 's#I (.*) (.*) teacher.#\1\2#g'
amoldboy
命令說明
思路:用oldboy
字元替換I
am oldboy teacher.
下面解釋用□
代替空格
^.*am□
–>這句的意思是以任意字元開頭到am□
為止,匹配檔案中的I am□
字串;\([a-z].*\)□
–>這句的外殼就是括號\(\)
,裡面的[a-z]
表示匹配26個字母的任何一個,[a-z].*
合起來就是匹配任意多個字元,本題來說就是匹配oldboy
字串,由於oldboy
字串是需要保留的,因此用括號括起來匹配,後面通過\1
來取oldboy
字串。□tea.*$
–>表示以空格tea
起始,任意字元結尾,實際就是匹配oldboy
字串後,緊接著的字串□teacher.
;- 後面被替換的內容中的
\1
就是取前面的括號裡的內容了,也就是我們要的oldboy
字串。 ()
是擴充套件正則表示式的元字元,sed軟體預設識別基本正則表示式,想要使用擴充套件正則需要使用\
轉義,即\(\)
。sed使用-r
選項則可以識別擴充套件正則表示式,此時使用\(\)
反而會出錯。
企業案例4:系統開機啟動項優化
[[email protected] ~]# chkconfig --list|grep "3:on"|grep -vE "sshd|crond|network|rsyslog|sysstat"|awk '{print $1}'|sed -r 's#^(.*)#chkconfig \1 off#g'|bash
[[email protected] ~]# chkconfig --list|grep "3:on"
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
2.3.5 特殊符號&
代表被替換的內容
[[email protected] ~]# sed '1,3s#C#--&--#g' person.txt #→此處&等於C
101,oldboy,--C--EO #→將1到3行的C替換為--C--
102,zhangyao,--C--TO
103,yy,--C--OO
104,feixue,CFO
105,dandan,CIO
企業案例5:批量重新命名檔案
當前目錄下有檔案如下所示:
[[email protected] test]# ls
stu_102999_1_finished.jpg stu_102999_2_finished.jpg stu_102999_3_finished.jpg stu_102999_4_finished.jpg stu_102999_5_finished.jpg
要求用sed命令重新命名,效果為stu_102999_1_finished.jpg==>stu_102999_1.jpg
,即刪除檔名的_finished
2.4 查
p 輸出指定內容,但預設會輸出2次匹配的結果,因此使用n取消預設輸出
2.4.1 按行查詢
[[email protected] ~]# sed '2p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
105,feixue,CIO
[[email protected] ~]# sed -n '2p' person.txt
102,zhangyao,CTO
[[email protected] ~]# sed -n '2,3p' person.txt
102,zhangyao,CTO
103,Alex,COO
說明:取行就用sed,最簡單
[[email protected] ~]# sed -n '1~2p' person.txt
101,oldboy,CEO
103,Alex,COO
105,feixue,CIO
[[email protected] ~]# sed -n 'p' person.txt
101,oldboy,CEO
102,zhangyao,CTO
103,yy,COO
104,feixue,CFO
105,dandan,CIO
2.4.2 按字串查詢
[[email protected] ~]# sed -n '/CTO/p' person.txt
102,zhangyao,CTO
[[email protected] ~]# sed -n '/CTO/,/CFO/p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
2.4.3 混合查詢
[[email protected] ~]# sed -n '2,/CFO/p' person.txt
102,zhangyao,CTO
103,Alex,COO
104,yy,CFO
[[email protected] ~]# sed -n '/feixue/,2p' person.txt
105,feixue,CIO
相關推薦
linux之sed用法
sil 資料 log sed的用法 單位 welcome 數據 讀取 local sed是一個很好的文件處理工具,本身是一個管道命令,主要是以行為單位進行處理,可以將數據行進行替換、刪除、新增、選取等特定工作,下面先了解一下sed的用法 sed命令行格式為:
【轉載】linux之sed用法
span 變量 常用 tdi 選擇 包括 div 輸入 記得 linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一個很好的文件處理工具,本身是
謝煙客---------Linux之 sed工具使用
linuxsed Stream EDitor 文本流編輯器, 行編輯器sed工作方式 sed基本使用格式一:sed [OPTION ...] [SCRIPT] [FILE...] 多個文件處理: 處理完一個,繼續處理第二個。 sed script file1 --> sed script fil
LINUX 之 sed用法
sed用法 Linux sed命令是利用script來處理文本文件 sed可依照script的指令,來處理、編輯文本文件 sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等 語法 sed [-hnV][-e<script>][-
Linux 之 sed 與 find 命令結合使用
sedsed 與 find 命令結合使用 目的:把/root/kang目錄下,所有帶有*.sh結尾的文件,並且內容oldboy的字符串,替換成kang [root@localhost kang]# find /root/kang/ -type f -name "*.sh"|xargs /root/kang/
Linux 之 sed 實例詳解
sedsed 實例詳解 文本內容: 101,oldboy,CEO 102,zhangyao,CTO 103,Alex,COO 104,yy,CFO 105,feixue,CIO 1.sed 增加內容 -a 往文本或號後面增加內容 -i 往行號前增加內容 -a 實例:在A
玩轉LINUX之sed命令詳解
用戶 常見 mail 括號 {} int 緩沖 復雜 commands Linux sed命令是利用script來處理文本文件。 sed可依照script的指令,來處理、編輯文本文件。 Sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等。 執行時,s
Linux之sed命令詳解
sed是一種流編輯器,它是文字處理中非常好的工具,能夠完美的配合正則表示式使用,功能不同凡響。處理時,把當前處理的行儲存在臨時緩衝區中,稱為“模式空間”(pattern space),接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,
Linux之sed命令常見用法
cron 更改 inux api lin sed命令 -s 輸出 syslog 1. sed(stream editor),流編輯器 linux中,主要中sed命令實現對文件的增刪改替換查 名稱 sed - 用於過濾和轉換文本的流編輯
LINUX 之 SED 使用
Sed是Stream Editor(流編輯器)縮寫,是操作、過濾和轉換文字內容的強大工具。常用功能有增刪改查,過濾,取行。 [[email protected] ~]# sed --version #→ sed軟體版本GNU sed version 4.2.1 語法格式 sed [options
Linux下常用命令之sed學習總結
linux sed sed命令 正則表達式 sed總結 Sed功能說明:Sed是linux下一個強大的文本文件處理工具,通過對文件增加、刪除、查找、查詢操作,配合正則表達式以實現工作中的各種需求。同時也是一名運維人員必須掌握的核心技能。---------------------------
Linux命令簡單操作之sed
es2017 字符串 選項 常用 images sed 匹配 lena options sed sed語法格式: sed[options ]‘command’ file(s) sed常用選項: -n:只有經過sed 特殊處理的那一行(或者動作)才會被列出來
【Linux】基礎每日一命之sed命令
標準 tin .... ddr 一行 inet6 修改文件 方法 兩個 sed命令是利用script來處理文件 sed可依照script的指令,來處理、編輯文本文件。sed主要用來自動編輯一個或多個文件;簡化對文件的反復操作;編寫轉換程序等 語法:sed [-hnV][-e
Linux學習總結(二十)正則三劍客之sed
sedsed 流式編輯器,針對文檔的行來操作的 一 查找打印 1.打印某行格式: sed -n ‘n‘p filename 單引號內的n代表數字,表示第幾行例如:打印第二行sed -n ‘2‘p /etc/passwd也可以指定區間,比如打印前三行sed -n‘1,3‘p /etc/passwd打印所有的行s
Linux常用命令之sed
UC perm wid cross 每次 orm separate 當前 命令操作 sed NAME sed - stream editor for filtering and transforming text 文本流編輯,sed是一個“非交互式的”面向字符流的編輯器
Linux常用命令之sed(2)
代碼 並不會 獨立 command 不存在 chan posix 通用 示例 Sed SED的英文全稱是 Stream EDitor,它是一個簡單而強大的文本解析轉換工具,在1973-1974年期間由貝爾實驗室的Lee E. McMahon開發,今天,它已經運行在所有的
Linux 文本查看命令之sed
Linux 文本查看命令之sed的簡單操Stream Editor 流編輯器 做行處理的默認不直接編輯原文件,在內存中進行處理(但是會整篇處理),臨時存放的空間叫做pattern space(模式空間)。如果可以被關鍵字匹配,然後就進行編輯(編輯完成後,可以將新的內容放入hold space,保持空間),如果
Linux 文本操作之sed
linux sedsed強大的文本處理工具,其工作流程大概如下 常用選項說明 -e<script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件。-f<script文件>或--file=<script文件> 以選項
linux三劍客之sed入門詳解
linux 三劍客 sed sed介紹sed流編輯器(stream editor),在三劍客中排行老二,是一款簡單的文本編輯語言。sed並不直接處理源文件,而是逐行讀取源文件的內容到內存(稱模式空間)中,然後在模式空間中使用sed命令處理,再打印模式空間處理後的內容到標準輸出。sed的能夠實現的功
linux三劍客sed之模式空間與保持空間
linux sed 三劍客 模式空間 保持空間 pattern space(模式空間) and hold space (保持空間)(H、h、G、g、x)模式空間:sed處理文本內容行的一個臨時緩沖區,模式空間中的內容會主動打印到標準輸出,並自動清空模式空間 保持空間:sed處理文本內容行的