網站首頁 編程語言 正文
簡介
說明
本文介紹Linux的sed流編輯器的用法。
sed編輯器要比交互式編輯器快得多,可以快速完成對數據的自動修改,比如:替換。
sed編輯器介紹
sed編輯器被稱作流編輯器(stream editor)。在交互式文本編輯器(比如vim)中,用鍵盤命令來交互式地編輯數據中的文本。和交互式文本編輯器相反,流編輯器在處理數據前基于預先提供的規則來編輯數據。
sed編輯器會執行下列操作。
- 一次從輸入中讀取一行數據。
- 根據所提供的編輯器命令匹配數據。
- 按照命令修改流中的數據。
- 將新的數據輸出到STDOUT。
流編輯器將所有命令與一行數據匹配完畢后,它會讀取下一行數據并重復這個過程。在流編輯器處理完流中的所有數據行后,它就會終止。
選項與命令
格式
sed [選項] [腳本命令] 文件名
選項
- -n
使用安靜silent模式。在一般sed的用法中,所有來自stdin的內容一般都會被列出到屏幕上。但如果加上-n參數后,則只有經過sed特殊處理的那一行(或者動作)才會被列出來
- -e
直接在指令列模式上進行 sed 的動作編輯
- -f
直接將 sed 的動作寫在一個文件內,-f filename則可以執行filename內的sed命令
- -r
讓sed命令支持擴展的正則表達式(默認是基礎正則表達式)
- -i
直接修改文件中內容。(如果不加-i,則由屏幕輸出,不修改原文件)
命令
- a\
- 在當前行下面插入文本。
- i\
- 在當前行上面插入文本。
- c\
- 把選定的行改為新的文本。
- d
- 刪除,刪除選擇的行。
- D
- 刪除模板塊的第一行。
-
s
- 替換指定字符
- g
- 獲得內存緩沖區的內容,并替代當前模板塊中的文本。
- G
- 獲得內存緩沖區的內容,并追加到當前模板塊文本的后面。
- h
- 拷貝模板塊的內容到內存中的緩沖區。
- H
- 追加模板塊的內容到內存中的緩沖區。
- l
- 列表不能打印字符的清單。
- n
- 讀取下一個輸入行,用下一個命令處理新的行而不是用第一個命令。
- N
- 追加下一個輸入行到模板塊后面并在二者間嵌入一個新行,改變當前行號碼。
- p
- 打印模板塊的行。
- P
- 打印模板塊的第一行。
- q
- 退出Sed。
- b label
- 分支到腳本中帶有標記的地方,如果分支不存在則分支到腳本的末尾。
- t label
- if分支,從最后一行開始,條件一旦滿足或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
- T label
- 錯誤分支,從最后一行開始,一旦發生錯誤或者T,t命令,將導致分支到帶有標號的命令處,或者到腳本的末尾。
- r file
- 從file中讀行。
- w file
- 寫并追加模板塊到file末尾。
- W file
- 寫并追加模板塊的第一行到file末尾。
- !
- 表示后面的命令對所有沒有被選定的行發生作用。
- =
- 打印當前行號碼。
- #
- 把注釋擴展到下一個換行符以前。
替換命令(s)
命令格式
[address]s/pattern/replacement/flags
- address
- 表示指定要操作的具體行
- pattern
- 需要被替換的內容
- replacement
- 要替換的新內容。
- flags
- 操作標記符
通配符(正則表達式)
sed支持正則表達式
示例:將單詞“like”替換為“hello”,其他帶like的單詞不變。
方法:
echo 'alike like liker' | sed 's/\blike\b/hello/g'
結果
示例
準備一個測試文件data1.txt,內容如下:
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.直接替換原文件內容
備注:建議先備份一下:cp data1.txt data1.txt.bak
需求:將red改為yellow。
方法:
sed -i 's/red/yellow/g' data1.txt
結果(查看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
結果(上邊命令執行結束后直接輸出如下內容)
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.從標準輸入獲取數據
需求:將“This is a big test”中的“big”改為“small”
方法:
echo 'This is a big test' | sed 's/big/small/g'
結果(上邊命令執行結束后直接輸出如下內容)
This is a small test
如下圖所示:
原文鏈接:https://blog.csdn.net/feiying0canglang/article/details/126449185
相關推薦
- 2022-12-24 Kotlin?Channel處理多個數據組合的流_Android
- 2022-12-27 go?build失敗報方法undefined的解決過程_Golang
- 2022-04-07 一篇文章帶你學習Python3的高階函數_python
- 2022-07-06 pandas如何統計某一列或某一行的缺失值數目_python
- 2022-06-13 matplotlib圖形整合之多個子圖繪制的實例代碼_python
- 2023-10-15 歸并排序三種常見寫法
- 2022-06-15 如何在python?中導入?package_python
- 2022-08-18 python編寫第一個交互程序步驟示例教程_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支