Shell中sed編輯器的具體使用
1.簡(jiǎn)介
sed是一種流編輯器,流編輯器會(huì)在編輯器處理數(shù)據(jù)之前基于預(yù)先提供的一組規(guī)則來(lái)編輯數(shù)據(jù)流。
sed編輯器可以根據(jù)命令來(lái)處理數(shù)據(jù)流中的數(shù)據(jù),這些命令要么從命令行中輸入,要么存儲(chǔ)在一個(gè)命令文本文件中。
2.sed編輯器的工作流程
sed 的工作流程主要包括讀取、執(zhí)行和顯示三個(gè)過(guò)程:
- 讀取: sed從輸入流(文件、管道、標(biāo)準(zhǔn)輸入)中讀取一行內(nèi)容并存儲(chǔ)到臨時(shí)的緩沖區(qū)中(又稱(chēng)模式空間,pattern space )。
- 執(zhí)行:默認(rèn)情況下,所有的sed 命令都在模式空間中順序地執(zhí)行, 除非指定了行的地址,否則sed命令將會(huì)在所有的行上依次執(zhí)行。
- 顯示:發(fā)送修改后的內(nèi)容到輸出流(屏幕)。在發(fā)送數(shù)據(jù)后,模式空間將會(huì)被清空。在所有的文件內(nèi)容都被處理完成之前,上.述過(guò)程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
在所有的文件內(nèi)容都被處理完成之前,上述過(guò)程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
注意:默認(rèn)情況下所有的sed命令都是在模式空間內(nèi)執(zhí)行的,因此輸入的文件并不會(huì)發(fā)生任何變化,除非是用重定向存儲(chǔ)輸出或者sed -i.
3.sed命令格式
sed -e '操作' 文件1 文件2..
sed -n -e '操作1;操作2' 文件1 文件2 ..
sed -f 腳本文件 文件1 文件2 ...
sed -i -e '操作' 文件1 文件2 ...
sed -e 'n {
操作1
操作2
}' 文件1 文件2 ...常用選項(xiàng):
| 選項(xiàng) | 作用 |
| -e或--expression= | 表示用指定命令來(lái)處理輸入的文本文件,只有一個(gè)操作命令時(shí)可省略,一般在執(zhí)行多個(gè)操作命令使用 |
| -f或--file= | 表示用指定的腳本文件來(lái)處理輸入的文本文件 |
| -h或--help | 顯示幫助 |
| -n、--quiet或silent | 禁止sed編輯器輸出,但可以與p命令一起使用完成輸出 |
| -i | 直接修改目標(biāo)文本文件 (建議先驗(yàn)證命令或備份目標(biāo)文件) |
| -r | sed 的動(dòng)作支持的是延伸型正規(guī)表示法的語(yǔ)法。(默認(rèn)是基礎(chǔ)正規(guī)表示法語(yǔ)法) |
常用選項(xiàng):
-n 不輸出模式空間內(nèi)容到屏幕,即不自動(dòng)打印
-e 多點(diǎn)編輯[root@www data]#sed -n -e '/^r/p' -e'/^b/p' /etc/passwd
-f FILE 從指定文件中讀取編輯腳本
-r, -E 使用擴(kuò)展正則表達(dá)式
-i.bak 備份文件并原處編輯#說(shuō)明:
-ir 不支持
-i -r 支持
-ri 支持
-ni 會(huì)清空文件
常用操作:
| 操作 | 作用 |
| s | 替換,替換指定字符 |
| d | 刪除,刪除選定的行 |
| a | 增加,在當(dāng)前行下面增加一行指定內(nèi)容 |
| i | 插入,在選定行上面插入一行指定內(nèi)容 |
| c | 替換,將選定行替換為指定內(nèi)容 |
| y | 字符轉(zhuǎn)換,轉(zhuǎn)換前后的字符長(zhǎng)度必須相同 |
| p | 打印,如果同時(shí)指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容;如果有非打印字符,則以ASCII碼輸出。其通常與"-n"選項(xiàng)一起使用。 |
| = | 打印行號(hào) |
| l(小寫(xiě)L) | 打印數(shù)據(jù)流中的文本和不可打印的ASCII字符(比如結(jié)束符$、制表符\t) |
sed -p 打印

sed -n:禁止sed編輯器輸出

操作‘=’:打印行號(hào)

操作 “l”:打印數(shù)據(jù)流中的文本和不可打印的ASCII字符

sed -e 多個(gè)操作
sed -n -e '命令1' -e '命令2' 文件 或者 sed -n -e '命令1;命令2' 文件 或者 sed -n ' 命令1 命令2 .... ' 文件

4.對(duì)指定行操作(尋址)
4.1以數(shù)字形式表示行區(qū)間
sed -n '#p' #代表行號(hào) 打印第#行內(nèi)容 sed -n '#,@p' #代表行號(hào) 打印第#行到第@行內(nèi)容 sed -n '$p' #代表行號(hào) 打印最后一行內(nèi)容 sed -n '#,+@p' #代表行號(hào) 打印第#行到第@+#行內(nèi)容 sed -e '#q' #代表行號(hào) 打印第1行到第#行內(nèi)容
1.
第一行 sed -n '1p' 3.txt 1-4行 sed -n '1,4p' 3.txt 最后一行 sed -n '$p' 3.txt

2.
用 + 打印1-2行 sed -n '1,+2p' 3.txt 打印2-4行 sed -n '2,+2p' 3.txt

3.
用 q 打印第一行到第三行 sed -e '3q' 3.txt

4.打印奇數(shù)行或者偶數(shù)行


4.2字符串過(guò)濾行
1.匹配文件中包含root的行

2.匹配root開(kāi)頭的行

3.匹配以bash結(jié)尾的行

4.匹配文件中,包含root或者bash的行,擴(kuò)展正則需加上-r

5.從第二行開(kāi)始,到第一個(gè)含有root行結(jié)束的行

6.匹配文件中rt中含有2個(gè)o的行

5.刪除指定行 sed 'd'


sed '/#/,/@/d' 文件名
sed會(huì)讀取每行的內(nèi)容,從第一個(gè)位置#打開(kāi)刪除功能,到第二位置@刪完后關(guān)閉刪除功能,再繼續(xù)查詢(xún)與 #和@匹配的行 進(jìn)行刪除 一直重復(fù)此操作


6.替換
6.1字符串
格式:
行范圍 s/舊字符串/新字符串/替換標(biāo)記
替換標(biāo)記
s/pattern/string/修飾符 查找替換,支持使用其它分隔符,可以是其它形式:s@@@,s###
替換修飾符:
g 行內(nèi)全局替換
p 顯示替換成功的行
w /PATH/FILE 將替換成功的行保存至文件中
I,i 忽略大小寫(xiě)
| 替換標(biāo)記 | 作用 |
| 數(shù)字 | 表明新字符串將替換第幾處匹配的地方 |
| g | 表明新字符串將會(huì)替換所有匹配的地方 |
| p | 打印與替換命令匹配的行,與-n一起使用 |
| w文件 | 將替換的結(jié)果寫(xiě)到文件中 |
- sed -g
- sed -s
1.替換
sed -n 's/root/admin/p' /etc/passwd ###將每一行的第一個(gè)root替換為admin sed -n 's/root/admin/2p' /etc/passwd ###將每行的第二個(gè)root替換為admin

sed -n 's/root/admin/3p' /etc/passwd ###將每行的第三個(gè)root替換成admin sed -n 's/root/admin/gp' /etc/passwd ###將每行的所有root,替換成admin

替換命令的分隔符看 s后面跟的字符,3個(gè)分隔符要保持一致,如果遇到跟分隔符相同的字符則需要使用"\"來(lái)轉(zhuǎn)義
將/bin/bash 轉(zhuǎn)換為 /sbin/nologin
因?yàn)樘鎿Q的格式為 s/舊/新 此處的"/"為分隔符 但是/bin/bash與/sbin/nologin中的"/"為根,容易引起歧義
1.1可以使用"\"轉(zhuǎn)義字符將"/"轉(zhuǎn)義為普通字符

1.2.或者使用其他字符作為分隔符,且所有分隔符保持一致(s后面的內(nèi)容就是分隔符)

2.添加
2.1###給passwd文件,開(kāi)頭都加上#
sed 's/^/#/' /etc/passwd

2.2###兩種給含有root坐在行注釋的方法


2.3###注釋前十行

2.4###重定向到文件中

3.刪除

6.2替換整行內(nèi)容
替換前與替換后的字符可以不一致
sed '#c 新內(nèi)容 文件名 #替換第#行的全部?jī)?nèi)容 或者 sed '/舊內(nèi)容/c 新內(nèi)容' 文件名 #將被篩選到(含有舊內(nèi)容)的行替換為新內(nèi)容

6.3字符替換
替換前與替換后的字符個(gè)數(shù)需要一致
sed 'y/舊內(nèi)容/新內(nèi)容/' 文件名

7.增加(插入)內(nèi)容
7.1在行前插入
$i ###在文件最后一行,前面添加 1i ###在文件第一行,前面添加

7.2在行后插入內(nèi)容
1a ###在第一行后面添加 $a ###在最后一行的后面添加

7.3插入文件內(nèi)容

7.4調(diào)換順序

8.小案例
1.顯示幾點(diǎn)到幾分的日志
sed -n '/2018:08:09/,/2018:09:42:37/p' access_log
2.奇偶數(shù)

3.-i 修改文件

4.-a 追加

5.\:空格 \n:換行

6. 2i###第二行前面

7. 2c###將第二行替換

8.取反

9.分組
1. \2的意思


2. sed分組取地址

3. 取IP地址



-n:不自動(dòng)打印,就不會(huì)重復(fù)輸出了
-r:開(kāi)啟擴(kuò)展正則,就不用加轉(zhuǎn)義了,但是你寫(xiě)入的命令,還是要轉(zhuǎn)義
到此這篇關(guān)于Shell中sed編輯器的具體使用的文章就介紹到這了,更多相關(guān)Shell sed編輯器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在 Bash 中循環(huán)遍歷文件內(nèi)容的不同方法
本文介紹了在Bash腳本中遍歷文件內(nèi)容的幾種方法,包括使用while循環(huán)和read命令逐行讀取文件,使用for循環(huán)和cat命令讀取整個(gè)文件內(nèi)容,使用IFS變量進(jìn)行單詞循環(huán),以及使用awk命令進(jìn)行更高級(jí)的文本處理,每種方法都有其適用的場(chǎng)景和優(yōu)缺點(diǎn),感興趣的朋友跟隨小編一起看看吧2025-12-12
Linux實(shí)現(xiàn)壓縮文件的生成與查看的常用命令總結(jié)
如果你是后端程序員,我想你一定見(jiàn)過(guò)*.tar.gz、*.zip、*.jar后綴的文件吧,這些都是壓縮文件,那這些文件都是怎么生成的,又有哪些關(guān)鍵區(qū)別呢?本文將帶你一起了解這些文件和配套的操作命令,以及其經(jīng)常使用的場(chǎng)景2022-09-09
Linux查看當(dāng)前系統(tǒng)的資源占用情況的常用命令
本文介紹了幾種常用的系統(tǒng)性能監(jiān)控工具,包括top、free、vmstat和iostat等命令的使用方法及其參數(shù)說(shuō)明,通過(guò)這些工具可以有效監(jiān)控CPU、內(nèi)存、磁盤(pán)IO等關(guān)鍵資源的狀態(tài),需要的朋友可以參考下2025-04-04
Shell腳本中until循環(huán)語(yǔ)句的用法詳解
在 Linux Shell 編程世界中,循環(huán)結(jié)構(gòu)是控制程序流程、實(shí)現(xiàn)重復(fù)任務(wù)的核心工具之一,我們常聽(tīng)到 for 和 while 循環(huán),但有一個(gè)低調(diào)卻實(shí)用的反向選手:until 循環(huán),今天,我們將深入探索 Shell 腳本中的 until 循環(huán)語(yǔ)句,需要的朋友可以參考下2026-03-03
shell腳本 自動(dòng)創(chuàng)建用戶(hù)詳解及實(shí)例代碼
這篇文章主要介紹了shell腳本 自動(dòng)創(chuàng)建用戶(hù)詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03
一個(gè)shell小案例(創(chuàng)建日期目錄)
需要在多個(gè)目錄中 (如:beijing shanghai tianjin guangzhou 等等) 創(chuàng)建子目錄(以年份命名),然后進(jìn)入子目錄,新建目錄并以當(dāng)天的日期命名2016-08-08
shell腳本之判斷輸入?yún)?shù)是否為整數(shù)值的實(shí)例
今天小編就為大家分享一篇shell腳本之判斷輸入?yún)?shù)是否為整數(shù)值的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07

