Linux文本處理三劍客:sed

在Linux操作系統中,grep、sed、awk被稱為文本操作“三劍客”,上一期中,我們將詳細介紹grep的基本使用方法,希望能夠幫助到有需要的朋友,現在,我們繼續學習sed。

我會參考官方文檔來做翻譯理解。下面正式開始:

sed(Stream Editor) 命令,翻譯為:流編輯器。它主要用于文本替換、查找和替換,以及其他文本操作,例如插入、刪除和搜索。使用sed,我們可以在不打開整個文件的情況下編輯文件內容。它還支持正則表達式,使其成為更強大的文本操作工具。

雖然 sed 在某些方面類似于允許腳本編輯的編輯器(例如 ed),但它通過只對輸入進行一次遍歷來工作,因此效率更高。然而,sed 真正與其他類型的編輯器區別之處在于它可以在管道中過濾文本的能力。

?GNU sed 主頁: GNU sed - GNU Project - Free Software Foundation

GNU 軟件通用幫助: Getting help with GNU software- GNU Project - Free Software Foundation

下面是關于 sed 命令的詳細介紹,包括參數、用法和示例代碼。

1.sed 命令詳解(中文)

語法

sed [選項]... {腳本(僅在沒有其他腳本時)} [輸入文件]...

參數選項

-n, --quiet, --silent抑制模式空間的自動打印-e script, --expression=script將腳本添加到要執行的命令中-f script-file, --file=script-file將腳本文件的內容添加到要執行的命令中--follow-symlinks原地處理時跟蹤符號鏈接-i[后綴], --in-place[=后綴]原地編輯文件(如果提供了后綴,則會進行備份)-c, --copy在 -i 模式下對文件進行改組時使用復制而不是重命名-b, --binary不執行任何操作;用于與 WIN32/CYGWIN/MSDOS/EMX 兼容(以二進制模式打開文件(CR+LF 不被特殊處理))-l N, --line-length=N指定 l 命令所需的行包裝長度--posix禁用所有 GNU 擴展。-r, --regexp-extended在腳本中使用擴展正則表達式。-s, --separate將文件視為單獨的文件,而不是單個連續的長流。-u, --unbuffered從輸入文件中加載少量數據,并更頻繁地刷新輸出緩沖區-z, --null-data用空字符 (NUL) 分隔行--help顯示此幫助并退出--version輸出版本信息并退出

如果沒有給出 -e, --expression, -f, 或 --file 選項,則第一個非選項參數將被視為要解釋的 sed 腳本。所有剩余的 аргумент (yìrgēn) 都將被視為輸入文件名;如果沒有指定輸入文件,則讀取標準輸入。

2.sed 命令語法概要(中文)

這僅僅是 sed 命令的簡要語法概要,旨在為已經熟悉 sed 的用戶提供提醒。有關更完整的描述,請查閱其他文檔(例如 texinfo 文檔)。

零地址“命令”

 Zero-address ``commands'': label?  用于 b 和 t 命令的標簽。# comment  注釋一直持續到下一個換行符(或 -e 腳本片段的末尾)。}  {} 代碼塊的結束括號。

零地址或單地址命令

=   打印當前行號。
a \
文本   追加文本,其中每個嵌入的新行都以反斜杠開頭。i \
文本   插入文本,其中每個嵌入的新行都以反斜杠開頭。q [退出代碼]立即退出 sed 腳本,不再處理任何輸入,除非禁用了自動打印,否則將打印當前模式空間。退出代碼參數是 GNU 擴展。Q [退出代碼]立即退出 sed 腳本,不再處理任何輸入。這是 GNU 擴展。r 文件名   追加從 filename 讀取的文本。R 文件名   追加從 filename 讀取的一行。每次調用該命令都會從文件中讀取一行。這是 GNU 擴展。

接受地址范圍的命令

{        開始一個命令塊(以 } 結束)。b label   跳轉到標簽;如果省略標簽,則跳轉到腳本末尾。c \
text     用文本替換選定的行,其中每個嵌入的新行都以反斜杠開頭。d        刪除模式空間。開始下一個循環。D        如果模式空間不包含換行符,則啟動一個標準的新循環,就像發出 d 命令一樣。否則,刪除模式空間中的文本直到第一個換行符,并使用結果模式空間重新啟動循環,而不讀取新的輸入行。h H      將模式空間復制/追加到保持空間。g G      將保持空間復制/追加到模式空間。l        以“視覺上明確”的形式列出當前行。l width  以“視覺上明確”的形式列出當前行,并將其按寬度字符進行拆分。這是 GNU 擴展。n N      將下一行輸入讀入/追加到模式空間。p        打印當前模式空間。P        打印當前模式空間的第一個嵌入式換行符之前的內容。s/regexp/replacement/
嘗試將 regexp 與模式空間匹配。如果匹配成功,則用 replacement 替換匹配到的部分。replacement 可以包含特殊字符 & 來引用模式空間中匹配到的部分,以及特殊轉義序列 \1 到 \9 來引用 regexp 中相應的匹配子表達式。
t label        如果自上次讀取輸入行和上次 t 或 T 命令以來,s/// 執行了成功的替換,則跳轉到標簽;如果省略標簽,則跳轉到腳本末尾。
T label如果自上次讀取輸入行和上次 t 或 T 命令以來,沒有 s/// 執行成功的替換,則跳轉到標簽;如果省略標簽,則跳轉到腳本末尾。這是 GNU 擴展。
w filename        將當前模式空間寫入 filename。W filename        將當前模式空間的第一行寫入 filename。這是 GNU 擴展。x        交換保持空間和模式空間的內容。
y/source/dest/    將模式空間中出現在源中的字符轉換為目標中對應的字符。

3、常用選項和示例

下面是關于sed的一些常見用法和示例代碼:

# 顯示文件的部分文本:
# 可以只查看文件的一部分,例如只打印22到29行的內容。
sed -n 22,29p testfile.txt# 顯示除某些行之外的所有行:
# 顯示除22到29行之外的所有行。
sed 22,29d testfile.txt# 顯示從第n行開始的每m行:
# 可以顯示從第2行開始的每3行內容。
sed -n '2~3p' file.txt# 刪除一行:
# 可以刪除指定行號的行。
sed Nd testfile.txt# 若要刪除文件的最后一行
sed $d testfile.txt。# 查找和替換:
# 首次替換:將文件中的“danger”替換為“safety”。
sed 's/danger/safety/' testfile.txt# 全局替換:可以完全替換文件中的所有“danger”。
sed 's/danger/safety/g' testfile.txt# 替換特定行上的字符串:
# 替換文件第4行的字符串
sed '4 s/danger/safety/' testfile.txt# 替換文件第4到9行的字符串
sed '4,9 s/danger/safety/' testfile.txt# 在匹配搜索之后或之前添加一行:
# 使用選項a,在每個模式匹配之后添加新行
sed '/danger/a "This is new line with text after match"' testfile.txt# 使用選項i,在每個模式匹配之前添加新行
sed '/danger/i "This is new line with text before match" ' testfile.txt# 運行多個sed命令:
# 如果需要執行多個sed表達式,可以使用選項-e將sed命令鏈接起來
sed -e 's/danger/safety/g' -e 's/hate/love/' testfile.txt# 在編輯文件之前進行備份:
# 使用選項-i.bak,sed會在編輯文件之前創建一個備份文件,以防止意外修改導致的數據丟失
sed -i.bak -e 's/danger/safety/g' testfile.txt# 刪除以模式開頭和結尾的文件行:
# 刪除以特定字符串開始并以另一個字符串結束的行
sed -e 's/^danger.*stops$//g' testfile.txt# 附加行:
# 在每行之前添加一些內容
sed -e 's/.*/testing sed &/' testfile.txt# 刪除所有注釋行和空行
sed -e 's/#.*//;/^$/d' testfile.txt# 從/etc/passwd文件獲取所有用戶名:
# 獲取/etc/passwd文件的所有用戶名列表
sed 's/\\([^:]*\\).*/\\1/' /etc/passwd# 防止覆蓋系統鏈接:
使用-i參數時,為了避免破壞鏈接,請使用follow-symklinks選項
sed -i --follow-symlinks 's/danger/safety/g' testfile.txt

這些示例應該能幫助你更好地理解 sed 命令的用法和功能。先寫這多吧,主要還是要多練習,練習的話,用子系統Ubuntu就可以。繼續關注我,下期講講述awk命令!

?如果您覺得有些用處,歡迎在評論區留言,關注。謝謝您的閱讀!

?往期學習筆記:

Windows系統開啟Linux子系統(Ubuntu)

Linux常用命令(目錄操作命令)

Linux常用命令:文件的創建、復制、移動、查找和刪除命令

Linux常用命令:文本文件的查看與編輯

Linux常用命令:文本文件的拼接與分割

Linux常用命令:文件的權限管理

Linux常用命令:文件的下載、壓縮與解壓

Linux常用命令:常見的操作符

Linux常用命令:系統操作命令
?

?Linux文本處理三劍客:grep

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/715534.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/715534.shtml
英文地址,請注明出處:http://en.pswp.cn/news/715534.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Java同步Linux服務器時間

前言 公司客戶線上服務器采用的是UOS系統&#xff0c;實施發現系統不會同步時間&#xff0c;并且時間有真實時間有偏差&#xff0c;本意想安裝NTP授時服務&#xff0c;結果發現UOS安裝NTP都要折騰好久&#xff0c;遂采用Java來曲線救國了。 添加依賴 <dependency><…

Java基于SpringBoot的旅游網站的設計與實現論文

目 錄 摘 要 2 Abstract 3 1.1 課題開發的背景 4 1.2 課題研究的意義 4 1.3 研究內容 5 第二章 系統開發關鍵技術 6 2.1 JSP技術介紹 6 2.2 JAVA簡介 6 2.3 MyEclipse開發環境 7 2.4 Tomcat服務器 7 2.5 Spring Boot框架 7 2.6 MySQL數據庫 8 第三章 系統分析 9 3.1 系統可行性…

實踐航拍小目標檢測,基于YOLOv8全系列【n/s/m/l/x】參數模型開發構建無人機航拍場景下的小目標檢測識別分析系統

關于無人機相關的場景在我們之前的博文也有一些比較早期的實踐&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《deepLabV3Plus實現無人機航拍目標分割識別系統》 《基于目標檢測的無人機航拍場景下小目標檢測實踐》 《助力環保河道水質監測&#xff0c;基于yolov…

使用 llama.cpp 在本地部署 AI 大模型的一次嘗試

對于剛剛落下帷幕的2023年,人們曾經給予其高度評價——AIGC元年。隨著 ChatGPT 的火爆出圈,大語言模型、AI 生成內容、多模態、提示詞、量化…等等名詞開始相繼頻頻出現在人們的視野當中,而在這場足以引發第四次工業革命的技術浪潮里,人們對于人工智能的態度,正從一開始的…

JVM(5)

垃圾回收相關 垃圾收集器 警告:純八股文! 如果說上面我們講的收集算法是內存回收的方法論,那么垃圾收集器就是內存回收的具體體現. 垃圾收集器的作用:垃圾收集器是為了保證程序能夠正常,持久運行的一種技術,它是將程序中不用的死亡對象也就是垃圾對象進行清除,從而保證新的…

第四十五天| 322. 零錢兌換、279.完全平方數

Leetcode 322. 零錢兌換 題目鏈接&#xff1a;322 零錢兌換 題干&#xff1a;給你一個整數數組 coins &#xff0c;表示不同面額的硬幣&#xff1b;以及一個整數 amount &#xff0c;表示總金額。計算并返回可以湊成總金額所需的 最少的硬幣個數 。如果沒有任何一種硬幣組合能…

AI大語言模型【成像光譜遙感技術】ChatGPT應用指南

遙感技術主要通過衛星和飛機從遠處觀察和測量我們的環境&#xff0c;是理解和監測地球物理、化學和生物系統的基石。ChatGPT是由OpenAI開發的最先進的語言模型&#xff0c;在理解和生成人類語言方面表現出了非凡的能力。本文重點介紹ChatGPT在遙感中的應用&#xff0c;人工智能…

vscode + git

寫在前面&#xff1a; origin分支&#xff1a; 當我們在使用git clone的時候&#xff0c;git會自動地將這個遠程的repo命名為origin&#xff0c;拉取它所有的數據之后&#xff0c;創建一個指向它master的指針&#xff0c;命名為origin/master&#xff0c;之后會在本地創建一個…

C#單向鏈表實現:用泛型類在當前位置插入新數據的方法Insert()

一、涉及到的知識點 1.ListNode<T>類 ListNode<T>是一個泛型類&#xff0c;用于表示鏈表中的一個節點。Value和Next屬性是ListNode<T>最基本的屬性&#xff0c;用于表示節點的值和指向下一個節點的引用。但是&#xff0c;完全可以根據實際需求添加其他屬性&…

雙非二本找實習前的準備day5

學習目標&#xff1a; 每天2-3到簡單sql&#xff08;刷完即止&#xff09;&#xff0c;每天復習代碼隨想錄上的題目3道算法&#xff08;時間充足可以繼續&#xff09;&#xff0c;今天的八股背少一點&#xff0c;MySQL和Redis各1-2道好了&#xff0c;主攻復習是java基礎 今日…

C語言5道編程題簡單介紹(三)

1、打印楊輝三角 程序分析&#xff1a; 結構如下所示&#xff1a; 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1代碼如下&#xff1a; #include <stdio.h>int main() {int i,j;int a[10][10];printf("\n");for(i0;i<10;i) {a[i][0]1;a…

Vuex 是什么?它在 Vue 應用中扮演什么角色?解釋一下 Vuex 的狀態管理模式。如何在 Vuex 中進行異步操作?

一、Vuex 是什么&#xff1f; Vuex 是一個專為 Vue.js 應用程序開發的狀態管理模式。它采用集中式存儲管理應用的所有組件的狀態&#xff0c;并以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 的出現解決了多個組件間共享狀態的問題&#xff0c;使得狀態管理變得更加直…

#WEB前端(HTML屬性)

1.實驗&#xff1a;a,img 2.IDE&#xff1a;VSCODE 3.記錄&#xff1a; a: href插入超鏈接 默認情況下在本窗口打開鏈接, target可以設置打開的窗口,parent在父窗口打開&#xff0c;blank新開串口打開,top在頂層串口打開,self為默認在本窗口打開 img: 插入圖片 可以插…

解析/區分MOS管的三個引腳G、S、D(NMOS管和PMOS管)

MOS管的三個引腳分別是Gate&#xff08;柵極&#xff09;、Source&#xff08;源極&#xff09;和Drain&#xff08;漏極&#xff09;。以下是詳細介紹&#xff1a; Gate&#xff08;柵極&#xff09;。這是控制MOS管開關的關鍵引腳&#xff0c;用于控制電流的流通。Source&…

智能分析網關V4安全帽檢測/反光衣檢測/通用工服檢測算法及應用

TSINGSEE青犀視頻智能分析網關V4內置了近40種AI算法模型&#xff0c;支持對接入的視頻圖像進行人、車、物、行為等實時檢測分析&#xff0c;上報識別結果&#xff0c;并能進行語音告警播放。硬件管理平臺支持RTSP、GB28181協議、以及廠家私有協議接入&#xff0c;可兼容市面上常…

【DDD】學習筆記-實體和值對象:從領域模型的基礎單元看系統設計

今天我們來學習 DDD 戰術設計中的兩個重要概念&#xff1a;實體和值對象。 這兩個概念都是領域模型中的領域對象。它們在領域模型中起什么作用&#xff0c;戰術設計時如何將它們映射到代碼和數據模型中去&#xff1f;就是我們這一講重點要關注的問題。 另外&#xff0c;在戰略…

springboot238光影視頻

光影視頻平臺 摘 要 使用舊方法對光影視頻平臺的信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在光影視頻平臺的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題。這次開…

APS面試審核準備的常規問題

之前根據其他人的經驗貼&#xff0c;準備了一些可能APS 面試審核可能會遇到的常規問題&#xff0c;現在簡單分享一下。 一般會考慮到留學資金來源&#xff0c;在德國能不能順利畢業&#xff1b;學的是什么專業內容之類的&#xff0c;判斷去德國會不會好好學習&#xff1b;對德國…

Linux:上傳文件到虛擬機

常見的方法&#xff1a; 使用虛擬機軟件提供的文件共享功能&#xff1a; 對于VMware Workstation&#xff0c;可以使用“共享文件夾”功能。對于VirtualBox&#xff0c;可以使用“共享文件夾”或“拖放”功能。 使用網絡文件共享服務&#xff1a; 您可以在虛擬機中配置一個Sam…

【Python入門教程】Python實現雞兔同籠

今天跟大家分享一下很久之前自己做的雞兔同籠求解問題的小游戲&#xff0c;使用公式和基本的判斷語句即可實現&#xff0c;可以用來當練手或者消磨時間用。 大家在編代碼的時候最重要就是先理清邏輯思路&#xff0c;例如應該套幾層循環、分幾個模塊等等。然后在編碼時可以先隨意…