網(wǎng)站首頁 編程語言 正文
簡介
說明
本文介紹Linux的sed流編輯器的用法。
sed編輯器要比交互式編輯器快得多,可以快速完成對數(shù)據(jù)的自動修改,比如:替換。
sed編輯器介紹
sed編輯器被稱作流編輯器(stream editor)。在交互式文本編輯器(比如vim)中,用鍵盤命令來交互式地編輯數(shù)據(jù)中的文本。和交互式文本編輯器相反,流編輯器在處理數(shù)據(jù)前基于預先提供的規(guī)則來編輯數(shù)據(jù)。
sed編輯器會執(zhí)行下列操作。
- 一次從輸入中讀取一行數(shù)據(jù)。
- 根據(jù)所提供的編輯器命令匹配數(shù)據(jù)。
- 按照命令修改流中的數(shù)據(jù)。
- 將新的數(shù)據(jù)輸出到STDOUT。
流編輯器將所有命令與一行數(shù)據(jù)匹配完畢后,它會讀取下一行數(shù)據(jù)并重復這個過程。在流編輯器處理完流中的所有數(shù)據(jù)行后,它就會終止。
選項與命令
格式
sed [選項] [腳本命令] 文件名
選項
- -n
使用安靜silent模式。在一般sed的用法中,所有來自stdin的內(nèi)容一般都會被列出到屏幕上。但如果加上-n參數(shù)后,則只有經(jīng)過sed特殊處理的那一行(或者動作)才會被列出來
- -e
直接在指令列模式上進行 sed 的動作編輯
- -f
直接將 sed 的動作寫在一個文件內(nèi),-f filename則可以執(zhí)行filename內(nèi)的sed命令
- -r
讓sed命令支持擴展的正則表達式(默認是基礎正則表達式)
- -i
直接修改文件中內(nèi)容。(如果不加-i,則由屏幕輸出,不修改原文件)
命令
- a\
- 在當前行下面插入文本。
- i\
- 在當前行上面插入文本。
- c\
- 把選定的行改為新的文本。
- d
- 刪除,刪除選擇的行。
- D
- 刪除模板塊的第一行。
-
s
- 替換指定字符
- g
- 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并替代當前模板塊中的文本。
- G
- 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當前模板塊文本的后面。
- h
- 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。
- H
- 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū)。
- l
- 列表不能打印字符的清單。
- n
- 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。
- N
- 追加下一個輸入行到模板塊后面并在二者間嵌入一個新行,改變當前行號碼。
- p
- 打印模板塊的行。
- P
- 打印模板塊的第一行。
- q
- 退出Sed。
- b label
- 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾。
- t label
- if分支,從最后一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
- T label
- 錯誤分支,從最后一行開始,一旦發(fā)生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
- r file
- 從file中讀行。
- w file
- 寫并追加模板塊到file末尾。
- W file
- 寫并追加模板塊的第一行到file末尾。
- !
- 表示后面的命令對所有沒有被選定的行發(fā)生作用。
- =
- 打印當前行號碼。
- #
- 把注釋擴展到下一個換行符以前。
替換命令(s)
命令格式
[address]s/pattern/replacement/flags
- address
- 表示指定要操作的具體行
- pattern
- 需要被替換的內(nèi)容
- replacement
- 要替換的新內(nèi)容。
- flags
- 操作標記符
通配符(正則表達式)
sed支持正則表達式
示例:將單詞“l(fā)ike”替換為“hello”,其他帶like的單詞不變。
方法:
echo 'alike like liker' | sed 's/\blike\b/hello/g'
結(jié)果
示例
準備一個測試文件data1.txt,內(nèi)容如下:
The quick red fox jumps over the lazy dog.
The quick red fox jumps over the lazy dog.
The quick red fox jumps over the lazy dog.
The quick red fox jumps over the lazy dog.
1.直接替換原文件內(nèi)容
備注:建議先備份一下:cp data1.txt data1.txt.bak
需求:將red改為yellow。
方法:
sed -i 's/red/yellow/g' data1.txt
結(jié)果(查看data1.txt)
cat data1.txt
The quick yellow fox jumps over the lazy dog.
The quick yellow fox jumps over the lazy dog.
The quick yellow fox jumps over the lazy dog.
The quick yellow fox jumps over the lazy dog.
2.在命令行上使用多個命令
需求:將red改為yellow,dog改為cat。
方法:
sed -e 's/red/yellow/g; s/dog/cat/g' data1.txt
結(jié)果(上邊命令執(zhí)行結(jié)束后直接輸出如下內(nèi)容)
The quick yellow fox jumps over the lazy cat.
The quick yellow fox jumps over the lazy cat.
The quick yellow fox jumps over the lazy cat.
The quick yellow fox jumps over the lazy cat.
3.從標準輸入獲取數(shù)據(jù)
需求:將“This is a big test”中的“big”改為“small”
方法:
echo 'This is a big test' | sed 's/big/small/g'
結(jié)果(上邊命令執(zhí)行結(jié)束后直接輸出如下內(nèi)容)
This is a small test
如下圖所示:
原文鏈接:https://blog.csdn.net/feiying0canglang/article/details/126449185
相關(guān)推薦
- 2022-05-18 Qt?關(guān)于容器的遍歷迭代器的使用問題小結(jié)_C 語言
- 2022-07-03 C#并行編程之PLINQ(并行LINQ)_C#教程
- 2022-07-09 systemd開機啟動和關(guān)機回調(diào)腳本
- 2022-07-09 kubernetes之證書更新
- 2023-01-20 C++利用模板實現(xiàn)消息訂閱和分發(fā)功能_C 語言
- 2023-03-21 styled-components?性能詳解_React
- 2022-10-12 Nginx?504?Gateway?Time-out的兩種最新解決方案_nginx
- 2022-03-20 C語言數(shù)據(jù)結(jié)構(gòu)之鏈隊列的基本操作_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支