從入門到實戰:Linux sed命令全攻略,文本處理效率翻倍

從入門到實戰:Linux sed命令全攻略,文本處理效率翻倍

文章目錄

  • 從入門到實戰:Linux sed命令全攻略,文本處理效率翻倍
    • 一、認識sed:什么是流編輯器?
    • 二、吃透sed工作原理:為什么它能高效處理文本?
    • 三、sed基礎用法:命令格式與核心選項
      • 3.1 核心選項解析
      • 3.2 核心操作指令
    • 四、sed實戰演練:從基礎到進階案例
      • 4.1 文本查看:精準輸出指定內容(p指令)
      • 4.2 文本刪除:批量清理無用內容(d指令)
      • 4.3 文本替換:批量修改內容(s/c/y指令)
        • 4.3.1 s指令:字符串替換(最常用)
        • 4.3.2 c指令:整行替換
        • 4.3.3 y指令:字符轉換(按位置一一對應)
      • 4.4 文本遷移:插入、追加與保存(a/i/w/r指令)
        • 4.4.1 插入/追加(i/a指令)
        • 4.4.2 保存/讀取(w/r指令)
      • 4.5 多行處理:保留空間的應用(H/G指令)
      • 4.6 腳本批量處理:多指令集成(-f選項)
    • 五、生產環境實戰:sed的高頻應用場景
      • 5.1 修改網絡配置:設置IP地址
      • 5.2 調整Apache配置:修改監聽地址與端口
      • 5.3 配置vsftpd服務:禁止匿名登錄
      • 5.4 提取網卡IP地址:結合管道與正則
    • 六、sed使用注意事項
    • 總結

在Linux系統中,文本處理是日常工作中繞不開的環節。無論是分析日志、修改配置文件,還是批量處理數據,都需要高效的文本編輯工具。sed命令作為一款流編輯器,憑借其強大的批量處理能力和靈活的腳本支持,成為了Linux運維、開發人員的必備工具。本文將從sed的基本概念出發,循序漸進講解其原理、用法,并通過實戰案例展示其在生產環境中的應用,助你輕松掌握這一高效文本處理利器。

一、認識sed:什么是流編輯器?

sed全稱為“Stream Editor”(流編輯器),它與傳統的交互式編輯器(如vi)不同,不直接打開文件進行交互式編輯,而是通過腳本指令對輸入的文本流(文件、管道、標準輸入等)進行逐行處理

其核心價值在于:

  • 自動化處理:可通過腳本實現重復、繁瑣的文本編輯操作自動化,避免人工逐行修改的低效與失誤。
  • 批量處理:支持同時處理單個或多個文件,輕松實現大規模文本的統一修改。
  • 管道集成:可與Linux其他命令(如grep、cat、ifconfig等)通過管道結合,構建強大的文本處理流水線。

二、吃透sed工作原理:為什么它能高效處理文本?

想要靈活運用sed,必須先理解其底層工作流程。sed的核心是“模式空間”(Pattern Space)——一個臨時緩沖區,所有編輯操作都在其中進行,默認不會修改原文件(除非主動指定)。其完整工作流程可分為讀取、執行、顯示三個循環步驟:

  1. 讀取(Read):從輸入流中讀取一行文本,存儲到模式空間中,清空模式空間原有內容。
  2. 執行(Execute):按照指定的腳本指令,對模式空間中的文本進行匹配和編輯。若未指定行地址,指令將作用于所有行;若指定了行地址,僅匹配的行會被處理。
  3. 顯示(Print):將模式空間中處理后的文本輸出到輸出流(默認是屏幕),隨后清空模式空間。

重復以上三步,直到輸入流中的所有行都處理完畢。

關鍵注意點:默認情況下,sed僅修改模式空間中的內容,原文件保持不變。若需修改原文件,需使用-i選項(建議先備份,如-i.bak會保留原文件為.bak備份)。

三、sed基礎用法:命令格式與核心選項

sed的命令格式主要有兩種,分別適用于簡單指令和復雜腳本場景:

# 1. 直接指定指令處理文本
sed [選項] '操作' 文件名/輸入流
# 2. 通過腳本文件處理文本(適用于多指令場景)
sed [選項] -f 腳本文件 文件名/輸入流

3.1 核心選項解析

sed的選項用于控制處理方式,常用選項如下表所示:

選項英文全稱功能說明
-e–expression允許在同一命令中指定多個編輯指令(多指令處理)
-n–quiet/silent取消默認輸出(僅輸出經過編輯指令處理后的內容)
-f–file從指定的腳本文件中讀取編輯指令
-i–in-place直接修改原文件(危險!建議搭配備份,如-i.bak
-r/-E–regexp-extended使用擴展正則表達式(無需對`()、{}、
-s–separate將多個文件視為獨立文件處理,而非連續的文本流
-h–help顯示幫助信息

3.2 核心操作指令

sed的“操作”由“行地址”和“動作指令”組成,格式為[n1[,n2]]動作,其中n1,n2指定作用的行范圍(可選),動作指定具體編輯操作。常用動作指令如下:

動作功能說明
p打印模式空間中的內容,常與-n搭配(避免重復輸出)
d刪除模式空間中的匹配行
s字符串替換,格式為s/被替換內容/替換內容/[選項](選項:g-全局替換;n-第n次匹配替換)
a在匹配行下方插入指定內容
i在匹配行上方插入指定內容
c用指定內容替換匹配的整行
y字符轉換,格式為y/原字符集/目標字符集/(按位置一一對應轉換)
H將匹配行復制到“保留空間”(臨時緩存,用于多行處理)
G將保留空間的內容追加到模式空間
w將匹配行寫入指定文件
r讀取指定文件的內容,追加到匹配行之后

四、sed實戰演練:從基礎到進階案例

以下案例均以demo文件為測試對象(內容如下),帶你逐步掌握sed的核心用法:

1. Hello, the world!
2. This is a test file.
3. He was short and fat.
4. A wood cross!
5. PI=3.141592653589793238462643383249901429
6. Misfortunes never come alone/single.
7. 
8. linux is great!

4.1 文本查看:精準輸出指定內容(p指令)

p指令用于打印文本,需配合-n選項(否則會重復輸出默認內容),常用于篩選特定行或匹配內容。

案例命令說明
輸出所有行sed -n 'p' demo等同于cat demo
輸出第3行sed -n '3p' demo僅打印第3行
輸出3-5行sed -n '3,5p' demo打印連續行(3到5行)
輸出奇數行sed -n 'p;n' demon表示“讀取下一行”,先打印當前行再讀下一行,實現奇數行輸出
輸出偶數行sed -n 'n;p' demo先讀下一行,再打印,實現偶數行輸出
輸出含“the”的行sed -n '/the/p' demo按內容匹配(正則),打印含“the”的行
輸出以“PI”開頭的行sed -n '/^PI/p' demo正則匹配行首,^表示行首
輸出以數字結尾的行sed -n '/[0-9]$/p' demo正則匹配行尾,$表示行尾
輸出含“wood”單詞的行sed -n '/\<wood\>/p' demo\<\>表示單詞邊界,避免匹配“woood”等

4.2 文本刪除:批量清理無用內容(d指令)

d指令用于刪除匹配的行,注意:默認不修改原文件,僅輸出刪除后的結果;若需修改原文件,加-i選項。

案例命令說明
刪除第3行sed '3d' demo輸出刪除第3行后的所有內容
刪除3-5行sed '3,5d' demo刪除連續行
刪除含“cross”的行sed '/cross/d' demo刪除匹配內容的行
刪除以小寫字母開頭的行sed '/^[a-z]/d' demo正則匹配行首小寫字母
刪除以“.”結尾的行sed '/\.$/d' demo.是特殊字符,需轉義\
刪除空行sed '/^$/d' demo^$匹配空行

4.3 文本替換:批量修改內容(s/c/y指令)

替換是sed最常用的功能,核心是s指令(字符串替換),c(整行替換)和y(字符轉換)為輔助。

4.3.1 s指令:字符串替換(最常用)

格式:s/被替換內容/替換內容/[選項],選項包括g(全局替換)、n(第n次匹配替換)。

  • 替換每行第一個“the”為“THE”:sed 's/the/THE/' demo
  • 替換每行第二個“l”為“L”:sed 's/l/L/2' demo
  • 全局替換所有“the”為“THE”:sed 's/the/THE/g' demo
  • 刪除所有“o”(替換為空):sed 's/o//g' demo
  • 3-5行全局替換“the”為“THE”:sed '3,5s/the/THE/g' demo
  • 給含“the”的行首加#(注釋):sed '/the/s/^/#/' demo
  • 給每行行尾加“EOF”:sed 's/$/EOF/' demo
4.3.2 c指令:整行替換
  • 將第3行替換為“Third line is replaced!”:sed '3c Third line is replaced!' demo
  • 將含“PI”的行替換為“圓周率:3.1415”:sed '/PI/c 圓周率:3.1415' demo
4.3.3 y指令:字符轉換(按位置一一對應)
  • 將“abc”轉換為“ABC”:echo "abc123" | sed 'y/abc/ABC/'(輸出“ABC123”)

4.4 文本遷移:插入、追加與保存(a/i/w/r指令)

4.4.1 插入/追加(i/a指令)
  • 在第3行前插入“Insert before line 3”:sed '3i Insert before line 3' demo
  • 在第3行后插入“Insert after line 3”:sed '3a Insert after line 3' demo
  • 在含“the”的行后插入多行內容:sed '/the/a New1\nNew2' demo\n表示換行)
4.4.2 保存/讀取(w/r指令)
  • 將含“the”的行保存到out.txtsed '/the/w out.txt' demo
  • /etc/hostname內容追加到含“the”的行后:sed '/the/r /etc/hostname' demo

4.5 多行處理:保留空間的應用(H/G指令)

sed的“保留空間”(Hold Space)是另一個臨時緩沖區,用于暫存多行內容,配合H(復制到保留空間)和G(追加到模式空間)實現多行遷移。

  • 將含“the”的行遷移到文件末尾:sed '/the/{H;d};$G' demo{H;d}表示“復制到保留空間后刪除當前行”,$G表示“在最后一行后追加保留空間內容”)
  • 將1-5行遷移到第7行后:sed '1,5{H;d};7G' demo

4.6 腳本批量處理:多指令集成(-f選項)

當需要執行多個指令時,可將指令寫入腳本文件,通過-f調用,更易維護。

  1. 創建腳本文件opt.sed
    # 指令1:刪除空行
    /^$/d
    # 指令2:全局替換“the”為“THE”
    s/the/THE/g
    # 指令3:給第3行前插入注釋
    3i # This is line 3
    
  2. 執行腳本:sed -f opt.sed demo

五、生產環境實戰:sed的高頻應用場景

sed在生產環境中常用于配置文件修改、日志分析、批量處理等場景,以下為典型案例。

5.1 修改網絡配置:設置IP地址

需求:將ens33網卡的IP地址修改為192.168.10.100,配置文件為/etc/sysconfig/network-scripts/ifcfg-ens33

# 使用-i.bak備份原文件,避免失誤無法恢復
sed -i.bak 's/^IPADDR=.*/IPADDR=192.168.10.100/' /etc/sysconfig/network-scripts/ifcfg-ens33
  • 解析:^IPADDR=.*匹配“IPADDR=”開頭的行,.*表示任意字符,替換為指定IP。

5.2 調整Apache配置:修改監聽地址與端口

需求:將Apache的監聽地址改為192.168.10.100,端口改為8080,配置文件為/etc/httpd/conf/httpd.conf

# 修改監聽地址和端口
sudo sed -i 's/^Listen .*/Listen 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf
# 修改ServerName
sudo sed -i 's/^ServerName .*/ServerName 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf

5.3 配置vsftpd服務:禁止匿名登錄

需求:編寫腳本,禁止vsftpd匿名登錄,允許本地用戶登錄并寫入。

#!/bin/bash
# 腳本名:config_vsftpd.sh
# 1. 定義路徑
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFIG="/etc/vsftpd/vsftpd.conf"# 2. 備份原配置(若未備份)
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak# 3. 基于樣本配置修改:禁止匿名登錄,允許本地用戶及寫入
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG# 4. 若沒有listen配置,添加到文件末尾
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG# 5. 重啟服務并設置開機自啟
systemctl restart vsftpd
systemctl enable vsftpd

執行腳本:chmod +x config_vsftpd.sh && ./config_vsftpd.sh

5.4 提取網卡IP地址:結合管道與正則

需求:從ifconfig ens33的輸出中提取IP地址。

ifconfig ens33 | sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
  • 解析:
    • 2s:作用于第2行(ifconfig輸出中IP通常在第2行);
    • .*inet ([0-9.]+) .*:正則匹配“inet ”后的IP地址([0-9.]+匹配IP,()分組提取);
    • \1:引用分組1的內容(即IP地址);
    • -r:使用擴展正則,無需轉義()-n:取消默認輸出,僅打印匹配結果。

六、sed使用注意事項

  1. 原文件保護:使用-i修改原文件前,務必先備份(如-i.bak),避免誤操作導致數據丟失。
  2. 正則轉義:默認情況下sed使用基礎正則,()、{}、|等特殊字符需轉義(如\();若使用-r/-E選項,可直接使用擴展正則,無需轉義。
  3. 行地址范圍n1,n2表示“從n1到n2行”,n1~n2表示“從n1行開始,每隔n2行”(如1~2表示奇數行)。
  4. 多指令分組:對同一行執行多個指令時,可使用{指令1;指令2;...}分組(如sed '/root/{s/root/ROOT/;s/x/X/g}' /etc/passwd)。

總結

sed作為Linux下的流編輯器,憑借“逐行處理+腳本驅動”的特性,在文本批量處理場景中效率遠超交互式編輯器。本文從原理到實戰,覆蓋了sed的核心用法與生產場景,掌握這些內容后,你可以輕松應對日志分析、配置修改、數據清洗等常見任務。

sed的功能遠不止于此,結合正則表達式和腳本編程,還能實現更復雜的文本處理邏輯。建議多動手練習,根據實際需求靈活組合指令,逐步提升文本處理效率!

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

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

相關文章

TIOBE 8月編程語言榜深度解析:Python占比突破26%,Perl成最大黑馬

根據TIOBE最新發布的2025年8月編程語言排行榜&#xff0c;一場靜默的技術變革正在上演&#xff1a;Python以26.14%的占比首次突破26%大關&#xff0c;連續12個月穩居榜首。這一數據不僅刷新了Python自身的歷史紀錄&#xff0c;更成為TIOBE指數自2001年創立以來的最高單語言占比…

從發現到恢復,看瑞數信息如何構建“抗毀重構”實戰路徑

在信息化社會&#xff0c;“韌性”“彈性”這些詞匯常被用來形容系統抵御和應對風險的能力&#xff0c;但對于身處關鍵基礎設施行業的運營者來說&#xff0c;這些概念往往過于抽象&#xff0c;難以直接指導實踐。 相比之下&#xff0c;“抗毀重構”更具畫面感。它不僅是一個管理…

深入理解 jemalloc:從內存分配機制到技術選型

在高性能服務&#xff08;如數據庫、緩存、JVM&#xff09;的底層優化中&#xff0c;內存分配效率直接影響系統整體性能。本文將從操作系統底層的malloc機制切入&#xff0c;詳解 jemalloc 的設計理念、開源應用場景、實戰案例&#xff0c;技術選型分析 一、操作系統底層的內存…

websoket使用記錄

1.項目使用記錄1.醫療項目中渲染回收柜溫濕度&#xff0c;需要實時更新2.回收柜安瓿回收和余液回收時&#xff0c;需要前端發送指令給回收柜&#xff0c;比如開門、關門等。還需要收到回收柜結果&#xff0c;比如回收的藥品信息等。我項目中用的是瀏覽器自帶的websoket&#xf…

DevOps篇之通過GitLab CI 流水線實現k8s集群中helm應用發布

一. 設計思路 構建一個 GitLab CI 流水線&#xff0c;并且要集成到 K8s 集群中的 Helm 應用發布流程。首先&#xff0c;需要了解 GitLab CI 的基本結構&#xff0c;比如.gitlab-ci.yml 文件的配置&#xff0c;包括 stages、jobs、變量設置等。然后&#xff0c;結合之前討論的 H…

詳盡 | Deeplabv3+結構理解

https://arxiv.org/pdf/1802.02611.pdf https://link.springer.com/chapter/10.1007/978-3-319-10578-9_23 目錄 Deeplabv3 Encoder部分 Decoder部分 補充摘要 SPP 空間金字塔池化層模塊 Dilated/Atrous Conv 空洞卷積 Deeplabv3 deeplab-v3是語義分割網絡&#xff0c;組…

【51單片機】【protues仿真】基于51單片機音樂盒(8首歌曲)系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 1、數碼管顯示當前歌曲序號 2、按鍵切換歌曲和播放暫停? 3、內置8首音樂 二、使用步驟 基于51單片機的音樂盒是一種能夠存儲和播放多首歌曲的電子設備&#xff0c;通過定時器產…

@ZooKeeper 詳細介紹部署與使用詳細指南

文章目錄 **ZooKeeper 詳細介紹、部署與使用** 1. 概述 & 核心介紹 1.1 什么是 ZooKeeper? 1.2 核心特性 1.3 核心概念 1.4 典型應用場景 2. 部署 (以 3 節點集群為例) 2.1 環境準備 2.2 安裝步驟 (在所有節點執行) 2.3 啟動與停止集群 2.4 防火墻配置 (如果開啟) 3. 基本…

騰訊Hunyuan-MT-7B翻譯模型完全指南:2025年開源AI翻譯的新標桿

&#x1f3af; 核心要點 (TL;DR) 突破性成就&#xff1a;騰訊混元MT-7B在WMT25全球翻譯競賽中獲得30/31項第一名雙模型架構&#xff1a;Hunyuan-MT-7B基礎翻譯模型 Hunyuan-MT-Chimera-7B集成優化模型廣泛語言支持&#xff1a;支持33種語言互譯&#xff0c;包括5種中國少數民…

Web 集群高可用全方案:Keepalived+LVS (DR) 負載均衡 + Apache 服務 + NFS 共享存儲搭建指南

文章目錄Keepalived LVS&#xff08;DR&#xff09; Apache NFS項目背景業務場景與核心需求傳統架構的痛點與局限技術方案的選型邏輯項目價值與預期目標項目實踐項目環境基礎配置配置 router配置免密登錄-可選配置 nfs配置 web配置 LVS-RS配置 HA 和 LVS-DS配置 ha1配置 ha2測…

Prometheus監控預警系統深度解析:架構、優劣、成本與競品

目錄 一、Prometheus是什么&#xff1f;核心定位與架構 二、競品分析&#xff08;Prometheus vs. Zabbix vs. Nagios vs. Commercial SaaS&#xff09; 三、部署成本分析 四、服務器資源消耗分析 五、給您的最終建議 一、Prometheus是什么&#xff1f;核心定位與架構 Prom…

Nginx反向代理及配置

Nginx反向代理 二級域名系統 顧名思義&#xff0c;我們有很多的這個不同的二級域名的用戶來訪問我們&#xff0c;比如說微博。它有一個主域名weibo.com。如果我叫一鳴,申請了一個微博&#xff0c;然后我就可以在微博這個主系統上申請一個二級域名來訪問我微博的主頁&#xff0…

嵌入式系統通信總線全景探秘:從板內到云端

引言 在嵌入式系統設計中&#xff0c;選擇合適的通信總線是決定系統性能、成本和可靠性的關鍵因素。從簡單的芯片間通信到復雜的工業網絡&#xff0c;不同的總線技術各司其職&#xff0c;形成了嵌入式世界的"交通網絡"。本文將深入探討五種經典且重要的通信技術&…

2022版Unity創建時沒有2D燈光(2D Light),沒有Global LIght2D怎么辦?

簡單來說就是你的渲染管線沒有升級到URP管線&#xff0c;所以才沒有這些2D燈光 如果你的創建燈光和我一樣&#xff0c;沒有紅線劃掉的部分&#xff0c;說明你和我的問題一樣&#xff0c;看下面的教程可以解決。 1. 確保Unity版本 確保你的Unity版本至少為2019.4或更高版本&…

技術小白如何快速的了解opentenbase?--把握四大特色

1.基本介紹 作為一名計算機專業相關背景的學生&#xff0c;我們或多或者接觸過一些數據庫&#xff0c;對于數據庫肯定是有所了解的&#xff1b; 你可能學習的是和微軟的sql server這樣的數據庫&#xff1b; 你可能接觸的更多的是企業級項目開發里面使用的這個mysql數據庫&#…

企業微信AI落地:如何選擇企業微信服務商?

現在企業用企業微信做客戶運營&#xff0c;最怕的不是“沒AI工具”&#xff0c;而是“AI用不起來”——要么功能不貼業務場景&#xff0c;員工嫌麻煩不用&#xff1b;要么回復不專業&#xff0c;客戶體驗差&#xff1b;要么數據不同步&#xff0c;管理者看不到效果。其實解決這…

【學Python自動化】 11 標準庫簡介 —— 第二部分

一、格式化輸出 reprlib 模塊 提供定制版 repr()&#xff0c;縮略顯示大型或深層嵌套對象import reprlib reprlib.repr(set(supercalifragilisticexpialidocious)) # "{a, c, d, e, f, g, ...}"pprint 模塊 美化輸出&#xff0c;添加換行和縮進顯示復雜數據結構impor…

【Kubernetes】知識點2

15. 什么是Pod的根容器&#xff1f;答&#xff1a;Pod 的根容器是每個 Pod 中默認存在的一個特殊容器pause容器&#xff0c;有時也稱為infra容器&#xff0c;它是Pod 啟動時創建的第一個容器&#xff0c;也是整個 Pod中所有容器的 “父容器”。其核心作用是為 Pod 內的所有容器…

視頻增強AI哪個效果好?實戰對比幫你找到最適合的工具

hitpaw 牛小影hitpaw 牛小影在處理低質量視頻時&#xff0c;我們經常會遇到畫面模糊、噪點過多、分辨率不足等問題&#xff0c;比如老舊視頻資料修復、監控錄像清晰化、手機拍攝視頻畫質提升等。這時候&#xff0c;一款好用的視頻增強AI軟件就成了剛需。下面就為大家盤點幾款效…

C#工作流示例(WorkflowCore)

using Microsoft.Extensions.DependencyInjection; using WorkflowCore.Interface; using WorkflowCore.Models;namespace LeaveRequestWorkflow {// 請假申請單public class LeaveBill{/// <summary>/// 申請人/// </summary>public string EmployeeName { get; s…