文章目錄
- sed編輯器
- 概述
- 作業流程
- 讀取
- 執行
- 顯示
- 命令格式
- 常用選項
- 常用操作
- 示例
- 列印內容
- 使用地址
- 洗掉行
- 替換標記
- 插入
sed編輯器
概述
- sed是一種流編輯器,流編輯器會在編輯器處理資料之前基于預先提供的一組規則來編輯資料流
- sed編輯器可以根據命令來處理資料流中的資料,這些命令要么從命令列中輸入,要么存盤在一個命令文本檔案中
- 流編輯器的作業程序可以理解為:是從上往下依次執行,就像流水一樣,一行一行逐行來執行的
作業流程
主要包括以下這三個程序
讀取
- sed從輸入流(檔案、管道、標準輸入)中讀取一行內容并存盤到臨時的緩沖區中(又稱模式空間,pattern space)
執行
- 默認情況下,所有的sed命令都在模式空間中順序地執行
- 除非指定了行的地址,否則sed命令將會在所有的行上依次執行
顯示
- 發送修改后的內容到輸出流
- 在發送資料后,模式空間將會被清空
- 在所有的檔案內容都被處理完成之前,上述程序將重復執行,直至所有內容被處理完
命令格式
#例:
sed -e '操作' 檔案1 檔案2 ...
sed -n -e '操作' 檔案1 檔案2 ...
sed -f 腳本檔案 檔案1 檔案2 ...
sed -i -e '操作' 檔案1 檔案2 ...
sed -e 'n{
操作1
操作2
...
}' 檔案1 檔案2 ...
常用選項
| 選項 | 解釋 |
|---|---|
| -e或–expression | 表示用指定命令來處理輸入的文本檔案,只有一個操作命令時可省略,一般在執行多個操作命令使用 |
| -f或–file | 表示用指定的腳本檔案來處理輸入的文本檔案 |
| -h或–help | 顯示幫助 |
| -n、–quiet或silent | 禁止sed編輯器輸出,但可以與p命令一起使用完成輸出 |
| -i | 直接修改目標文本檔案 |
常用操作
| 選項 | 解釋 |
|---|---|
| s | 替換:替換指定字符 |
| d | 洗掉:洗掉選定的行 |
| a | 增加:在當前行下面增加一行指定內容 |
| i | 插入:在選定行上而插入一行指定內容 |
| c | 替換:將選定行替換為指定內容 |
| y | 字符轉換;注意,轉換前后的字符長度必須相同 |
| p | 列印;如果同時指定行,則表示列印指定行;如果不指定行,則表示列印所有內容;如果有非列印字符,則以ASCII碼輸出;且其通常與“-n”選項一起結合使用 |
| = | 列印行號 |
| l | 列印資料流中的文本和不可列印的ASCII字符(比如結束符$、制表符\t) |
示例
列印內容
sed -ne 'p' zxc1


sed -n '=' zxc1

sed -n 'l' zxc1

sed -n '=;p' zxc1

[root@localhost shell]# sed -n '
> p
> =
> ' zxc1

使用地址
- sed編輯器有2種尋址方式:
- 以數字形式表示行區間
- 用文本模式來過濾出行
[root@localhost shell]# sed -n '1p' zxc1 ##列印第一行
one
[root@localhost shell]# sed -n '$p' zxc1 ##列印最后一行
twelve
[root@localhost shell]# sed -n '1,3p' zxc1 ##列印輸出第一行至第三行的內容,可在3前面加一個+符號
one
two
three
[root@localhost shell]# sed -n '3,$p' zxc1 ##列印從第三行至最后一行的內容
three
four
five
six
seven
eight
nine
ten
eleven
twelve
[root@localhost shell]# sed 5q zxc1 ##q用法:列印前5行內容后退出
one
two
three
four
five
sed -n 'p;n' zxc1
sed -n 'n;p' zxc1

sed -n '2,${n;p}' zxc1

sed -n '/user/p' /etc/passwd

sed -n '/^a/p' /etc/passwd

sed -n '/bash$/p' /etc/passwd
sed -n '/ftp\|root/p' /etc/passwd

sed -n '2,/nobody/p' /etc/passwd
sed -n '2,/nobody/=' /etc/passwd

sed -n '2,/nobody/=;2,/nobody/p' /etc/passwd

[root@localhost shell]# sed -nr '/ro{1,}t/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
##-r表示支持正則運算式
##匹配一次以上的o,就能匹配到root
洗掉行
sed 'd' zxc1
sed '3d' zxc1
sed '2,4d' zxc1


[root@localhost shell]# sed '/^$/d' zxc1
##用作洗掉空行
[root@localhost shell]# sed '/nologin$/d' /etc/passwd
##洗掉以nologin為結尾的內容
[root@localhost shell]# sed '/nologin$/!d' /etc/passwd
##"!"表示取反操作

sed -n 'p' zxc2
sed '/2/,/3/d' zxc2

cat zxc2
sed '/10/,/3/d' zxc2

替換標記
##格式:
行范圍 s/舊字串/新字串/替換標記
4種替換標記:
- 數字:表明新字串將替換第幾處匹配的地方
- g:表明新字串將會替換所有匹配的地方
- p:列印與替換命令匹配的行,與-n一起使用
- w 檔案:將替換的結果寫到檔案中
- 示例:
sed -n 's/root/admin/p' /etc/passwd
sed -n 's/root/admin/2p' /etc/passwd

sed -n 's/root/admin/gp' /etc/passwd

sed -n 's/root//gp' /etc/passwd

[root@localhost shell]# sed '1,20 s/^/#/' /etc/passwd

sed '/^root/ s/$/#/' /etc/passwd


cat zxc2
sed -f zxc3 zxc2

sed '1,20w, out.txt' /etc/passwd > dev/null

sed '1,20w out.txt' /etc/passwd > /dev/null
cat out.txt

插入

sed '1,3a ABC' 123.txt

sed '1i ABC' 123.txt

sed '5r /etc/resolv.conf' 123.txt

sed '/root/{H;d};$G' /etc/passwd
##包含root的行剪切到末尾,H表示復制到剪切板,G表示粘貼到指定行后

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241443.html
標籤:其他
上一篇:【java】idea控制臺亂碼?
下一篇:sed編輯器的使用以及詳細解讀
