Linux 中替換sed

以下是關于 sed(Stream Editor)的深度詳解和日常高頻使用場景,結合實用示例說明:


一、sed 核心概念

  • 流式編輯器:逐行處理文本,不直接修改源文件(除非使用 -i 選項)
  • 正則支持:基礎正則(BRE)和擴展正則(ERE,需加 -r-E
  • 核心原理:讀取 → 模式匹配 → 執行命令 → 輸出

二、基礎語法格式

sed [選項] '地址范圍/命令/參數' 文件

三、高頻使用場景與示例

1. 文本替換
# 替換每行第一個匹配項
sed 's/old/new/' file.txt# 全局替換(所有匹配項)
sed 's/old/new/g' file.txt# 替換第N次出現的匹配
sed 's/old/new/2' file.txt          # 只替換每行第二個匹配# 替換時忽略大小寫(GNU sed擴展)
sed 's/old/new/i' file.txt
2. 刪除行
# 刪除空行
sed '/^$/d' file.txt# 刪除注釋行(以#開頭)
sed '/^#/d' config.conf# 刪除特定范圍行
sed '10,20d' file.txt               # 刪除10-20行
sed '/start/,/end/d' file.txt       # 刪除兩個模式間的行
3. 插入/追加行
# 在第3行前插入文本
sed '3i\插入的內容' file.txt# 在匹配行后追加
sed '/pattern/a\追加的內容' file.txt# 文件開頭/結尾插入
sed '1i\開頭內容' file.txt
sed '$a\結尾內容' file.txt
4. 行篩選打印
# 打印含"error"的行(類似grep)
sed -n '/error/p' log.txt# 打印行號范圍
sed -n '10,15p' file.txt# 打印奇數行
sed -n '1~2p' file.txt              # 1,3,5...
5. 文件原地修改
# 直接修改文件(先測試!)
sed -i.bak 's/old/new/g' file.txt   # 備份原文件為file.txt.bak
sed -i '' 's/old/new/g' file.txt    # macOS下無備份修改
6. 高級替換技巧
# 引用匹配內容
echo "123 abc" | sed 's/[0-9]\+/[&]/'    # 輸出 "[123] abc"# 分組捕獲(使用\1,\2引用)
echo "foo-bar" | sed 's/\(foo\)-\(bar\)/\2-\1/'  # 輸出 "bar-foo"# 條件替換(僅對匹配行操作)
sed '/warning/s/foo/bar/' log.txt     # 只在含"warning"的行替換foo
7. 多命令組合
# 用分號分隔多個命令
sed 's/foo/bar/g; s/baz/qux/g' file.txt# 或用-e選項
sed -e 's/foo/bar/' -e '/baz/d' file.txt

四、日常實用案例

1. 日志處理
# 提取時間戳和錯誤信息
sed -n '/ERROR/{s/.*\(202[0-9]-[0-9]\{2\}-[0-9]\{2\}\).*\(ERROR:.*\)/\1 \2/p}' app.log# 統計HTTP狀態碼
sed -n 's/.*HTTP\/1\.[01]" \([0-9]\{3\}\).*/\1/p' access.log | sort | uniq -c
2. 配置文件修改
# 注釋掉某配置項
sed -i '/^SELINUX=/s/^/#/' /etc/selinux/config# 修改鍵值對
sed -i 's/^\(PORT=\).*/\13306/' config.ini
3. 數據清洗
# CSV轉TSV
sed 's/,/\t/g' data.csv# 刪除HTML標簽
sed 's/<[^>]*>//g' page.html
4. 批量重命名
# 測試重命名命令
ls *.jpg | sed 's/\(.*\)\.jpg/mv & \1_backup.jpg/'# 實際執行(先確認輸出無誤)
ls *.jpg | sed 's/\(.*\)\.jpg/mv & \1_backup.jpg/' | bash
5. 代碼處理
# 縮進所有行(前加4空格)
sed 's/^/    /' source.py# 刪除行尾空格
sed 's/[[:space:]]*$//' file.txt

五、sed 調試技巧

  1. 先不加 -i:測試時輸出到屏幕確認效果
    sed 's/pattern/replace/' file.txt
    
  2. 打印處理的行
    sed -n 's/foo/bar/p' file.txt     # 只顯示被修改的行
    
  3. 使用 & 調試
    sed 's/pattern/& ==> replaced/' file.txt  # 標記被替換的內容
    

六、性能優化建議

  1. 合并多個操作:減少管道和多次讀取
    # 低效
    cat file | sed 's/foo/bar/' | sed '/baz/d'
    # 高效
    sed -e 's/foo/bar/' -e '/baz/d' file
    
  2. 限制處理范圍:用地址范圍減少處理行數
    sed '100,200s/foo/bar/' largefile.txt
    

掌握這些 sed 技巧后,90% 的日常文本處理任務都能高效完成。對于更復雜的需求(如跨行處理),可結合 awkperl

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

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

相關文章

ADB 調試日志全攻略:如何開啟與關閉 `ADB_TRACE` 日志

ADB 調試日志全攻略&#xff1a;如何開啟與關閉 ADB_TRACE 日志 ADB&#xff08;Android Debug Bridge&#xff09;是 Android 開發的核心工具&#xff0c;但在排查問題時&#xff0c;默認日志可能不夠詳細。通過設置環境變量 ADB_TRACE&#xff0c;可以開啟 全量調試日志&…

實現druid數據源密碼加密

生成加密密碼集成了druid鏈接池的&#xff0c;可以實現數據源密碼加密。加密方式如下構建單元測試&#xff0c;并輸入密碼即可生成加密密碼以及加密公鑰Test public void testPwd() throws Exception {String password "123456";String[] arr com.alibaba.druid.fi…

【TCP/IP】20. 因特網安全

20. 因特網安全20. 因特網安全20.1 安全威脅20.2 安全服務20.3 基本安全技術20.3.1 密碼技術20.3.2 報文鑒別技術20.3.3 身份認證技術20.3.4 數字簽名技術20.3.5 虛擬專用網&#xff08;VPN&#xff09;技術20.3.6 防火墻技術20.3.7 防病毒技術20.4 IP 層安全20.5 傳輸層安全20…

數據結構之位圖和布隆過濾器

系列文章目錄 數據結構之ArrayList_arraylist o(1) o(n)-CSDN博客 數據結構之LinkedList-CSDN博客 數據結構之棧_棧有什么方法-CSDN博客 數據結構之隊列-CSDN博客 數據結構之二叉樹-CSDN博客 數據結構之優先級隊列-CSDN博客 常見的排序方法-CSDN博客 數據結構之Map和Se…

Web攻防-PHP反序列化魔術方法觸發條件POP鏈構造變量屬性修改黑白盒角度

知識點&#xff1a; 1.WEB攻防-PHP反序列化-序列化和反序列化 2.WEB攻防-PHP反序列化-常見魔術方法觸發規則 3.WEB攻防-PHP反序列化-反序列化漏洞產生原因 4.WEB攻防-PHP反序列化-黑白盒&POP鏈構造 一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化 什么是反序列化操作…

C# VB.NET多進程-管道通信,命名管道(Named Pipes)

要向已運行的進程發送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是啟動新進程&#xff0c;需要使用進程間通信&#xff08;IPC&#xff09;機制。以下是幾種常見的實現方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通過…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它徹底改變了C中資源管理和參數傳遞的方式。下面我將從多個維度深入講解右值引用。一、核心概念1. 值類別(Value Categories)lvalue (左值): 有標識符、可取地址的表達式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激變換器設計全流程(一)——電路拓撲及工作流程

一、電路拓撲原理 拓撲結構概述 開關反激電源采用反激式拓撲結構&#xff0c;主要由開關管&#xff08;通常為 MOSFET&#xff09;、變壓器、輸出整流二極管、輸出濾波電容以及控制電路等組成。其基本工作原理是通過開關管的周期性開關動作&#xff0c;將輸入直流電壓轉換為高…

uniapp語音播報天氣預報微信小程序

1.產品展示2.頁面功能(1)點擊上方按鈕實現語音播報4天天氣情況。3.uniapp代碼<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…

Pycharm 報錯 Environment location directory is not empty 如何解決

好長時間不看不寫代碼了&#xff0c;人也跟著犯糊涂。今天在Pycharm 導入虛擬環境時&#xff0c;一直報錯&#xff1a;“Environment location directory is not empty”&#xff0c;在網上百度很多很多方法都無法解決&#xff0c;直到我翻出我之前自己寫的導入虛擬環境的詳細過…

React強大且靈活hooks庫——ahooks入門實踐之場景類(scene)hook詳解

什么是 ahooks&#xff1f; ahooks 是一個 React Hooks 庫&#xff0c;提供了大量實用的自定義 hooks&#xff0c;幫助開發者更高效地構建 React 應用。其中場景類 hooks 是 ahooks 的一個重要分類&#xff0c;專門針對特定業務場景提供解決方案。 安裝 ahooks npm install …

大模型之Langchain篇(二)——RAG

寫在前面 跟著樓蘭老師學習【LangChain教程】2025吃透LangChain框架快速上手與深度實戰&#xff0c;全程干貨無廢話&#xff0c;三天學完&#xff0c;讓你少走百分之99彎路&#xff01;_嗶哩嗶哩_bilibili 計算相似度 一般用的余弦相似度&#xff0c;這里只是演示計算。 fr…

深入理解圖像二值化:從靜態圖像到視頻流實時處理

一、引言&#xff1a;圖像分析&#xff0c;從“黑與白”開始在計算機視覺任務中&#xff0c;**圖像二值化&#xff08;Image Binarization&#xff09;**是最基礎也是最關鍵的圖像預處理技術之一。它通過將灰度圖像中每個像素轉換為兩個離散值&#xff08;通常是0和255&#xf…

云蝠智能 VoiceAgent重構企業呼入場景服務范式

在數字化轉型浪潮中&#xff0c;企業呼入場景面臨客戶服務需求激增與人力成本攀升的雙重挑戰。傳統呼叫中心日均處理僅 300-500 通電話&#xff0c;人力成本占比超 60%&#xff0c;且服務質量受情緒波動影響顯著。云蝠智能推出的 VoiceAgent 語音智能體&#xff0c;通過全棧自研…

java進階(一)+學習筆記

1.JAVA設計模式1.1 什么是設計模式設計模式是軟件開發過程中前輩們在長期實踐中針對重復出現的問題總結出來的最佳解決方案。這些模式不是具體的代碼實現&#xff0c;而是經過驗證的、可重用的設計思想&#xff0c;能夠幫助開發者更高效地解決特定類型的問題。設計模式的重要性…

Pandas-數據清洗與處理

Pandas-數據清洗與處理一、數據清洗的核心目標二、缺失值處理1. 缺失值檢測2. 缺失值處理策略&#xff08;1&#xff09;刪除法&#xff08;2&#xff09;填充法三、異常值識別與處理1. 異常值檢測方法&#xff08;1&#xff09;統計法&#xff08;2&#xff09;業務規則法2. 異…

在 MacOS 上安裝和配置 Kafka

消息代理是一種軟件&#xff0c;充當在不同應用程序之間發送消息的中介。它的功能類似于服務器&#xff0c;從一個應用程序&#xff08;稱為生產者&#xff09;接收消息&#xff0c;并將其路由到一個或多個其他應用程序&#xff08;稱為消費者&#xff09;。消息代理的主要目的…

基于Leaflet調用天地圖在線API的多層級地名檢索實戰

目錄 前言 一、天地圖在線檢索 1、在線檢索功能 2、再談后后接口 二、Leaflet多層級實現實例 1、層級調用實現原理 2、Leaflet中多層級調用 3、成果展示 三、總結 前言 “地圖是世界的索引&#xff0c;而地名則是索引中的索引。”當互聯網地圖進入 Web 2.0 時代&#x…

基于Prompt結構的語校解析:3H日本語學校信息建模實錄(4/500)

基于Prompt結構的語校解析&#xff1a;3H日本語學校信息建模實錄&#xff08;4/500&#xff09; 系列延續&#xff1a;500所日本語言學校結構數據工程 關鍵詞&#xff1a;招生結構、JLPTEJU、國籍比例、認定校、Prompt訓練集 一、我們在構建什么樣的語言學校語料&#xff1f; …

Leaflet面試題及答案(61-80)

查看本專欄目錄 文章目錄 ?? 面試問題及答案(61-80)61. 如何在地圖上顯示一個動態更新的圖層?62. 如何實現地圖上的熱力圖(Heatmap)?63. 如何自定義地圖控件的位置?64. 如何處理地圖加載失敗的情況?65. 如何實現地圖的離線功能?66. 如何將地圖導出為圖片?67. 如何實…