sed用法

来源:https://www.cnblogs.com/tushanbu/archive/2022/09/16/16699459.html
-Advertisement-
Play Games

sed用法 基礎sed命令 sed命令的基本語法 sed OPTIONS… [SCRIPT] [INPUTFILE…] 常用的選項: -n,–quiet: 不輸出模式空間中的內容 -i: 直接編輯原文件,預設不對原文件進行操作 -e: 可以使用多個命令(腳本)進行操作 -f /path/from/s ...


sed用法


目錄

基礎sed命令

sed命令的基本語法

sed OPTIONS… [SCRIPT] [INPUTFILE…]

常用的選項:

-n,–quiet: 不輸出模式空間中的內容

-i: 直接編輯原文件,預設不對原文件進行操作

-e: 可以使用多個命令(腳本)進行操作

-f /path/from/sed_script: 從指定的文本中讀取處理腳本

-r: 使用擴展正則表達式

sed命令選項

替換標記
g:表示行內全面替換
w:表示把行寫入一個文件
x:表示互換模式空間的文本和保持空間的文本
y:表示把一個字元翻譯為另外的字元(不用於正則表達式)
單行模式空間
a :新增, a 的後面可以接字串,而這些字串會在新的一行出現(目前的下一行)

c :取代, c 的後面可以接字串,這些字串可以取代 n1,n2 之間的行!

d :刪除,因為是刪除,所以 d 後面通常不接任何東西;

i :插入, i 的後面可以接字串,而這些字串會在新的一行出現(目前的上一行);

p :列印,即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行

s :取代,通常這個 s 的動作可以搭配正則表達式!例如 1,20s/old/new/g

n:讀取下一個輸入行, 用下一個命令處理新的行

y:把一個或多個字元替換成另一個字元
a的用法

[root@localhost ~]# vim xbz
[root@localhost ~]# cat xbz
a b c
d
c
b
a
[root@localhost ~]# sed '3abbxxxx' xbz //在第三行下麵(第四行)進行新增
a b c
d
c
bbxxxx
b
a
[root@localhost ~]# sed '/c/abbxxxx' xbz  //在匹配的參數(c)下一行進行添加
a b c
bbxxxx
d
c
bbxxxx
b
a

c的用法


[root@localhost ~]# cat xbz 
a b c
d
c
b
a
[root@localhost ~]# sed '2cxxb' xbz //取代第二行
a b c
xxb
c
b
a
[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/d/caa' xbz  //在匹配的參數(d)進行取代
a b c
aa
c
b
a

d的用法

root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '1d' xbz //刪除第一行
d
c
b
a

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/c/d' xbz //在匹配的參數(c)進行整行刪除
d
b
a

i的用法

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '2i3838' xbz  //在第二行進行插入
a b c
3838
d
c
b
a

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed '/c/i6868' xbz //在匹配的參數(c)那一行進行插入
6868
a b c
d
6868
c
b
a

p的用法

[root@localhost ~]# cat xbz 
a b c
d
c
b
a

[root@localhost ~]# sed -n '/b/p' xbz //-n選項:只顯示匹配處理的行(否則會輸出所有)(也就是關閉預設的輸出),只是列印帶b的行
a b c
b

s的用法

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/' xbz //將匹配的參數(b)每行里的第一個參數進行替換
a a c
d
c
abb
a
[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed 's/b/a/g' xbz //在上面的基礎是加上g就可以全部進行替換
a a c
d
c
aaa
a

n的用法
此處的n不是sed -n的n的那種用法,是n讀取下一個輸入行

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a

[root@localhost ~]# sed -n '/a/n;p' xbz //匹配到的參數(a)下麵的所有行
d
c
bbb


y的用法

[root@localhost ~]# cat xbz 
a b c
d
c
bbb
a
[root@localhost ~]# sed '3y/c/C/' xbz //將匹配到的第三行小寫c改為大寫C
a b c
d
C
bbb
a

高階sed命令

模式空間與保持空間

模擬空間:
當前處理輸出的緩衝空間,因為sed就是一次處理一行的內容,就會把這一行的內容提取到模式空間,然後用sed命令處理這一行的內容,處理完成後輸出到屏幕,接著處理下一行 的內容
保持空間:
保持空間就是sed的另一個緩衝區,此緩衝區如其名,不會自動清空內容,也不會把緩衝區的內容列印到的標準輸出中
模式空間與保持空間的關係
模式空間:相當於流水線,文本行再模式空間中進行處理;
保持空間:相當於倉庫,在模式空間對數據進行處理時,可以把數據臨時存儲到保持空間;作為模式空間的一個輔助臨時緩衝區,但又是相互獨立,可以進行交互,命令可以定址模式空間但是不能定址保持空間。可以使用高級命令h,H,g,G與模式空間進行交互。

sed命令選項

多行空間模式
N:讀取匹配到的行的下一行追加至模式空間
P:列印模式空間開端至\n內容,並追加到預設輸出之前
D:如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本, 並不會讀取新的輸入行,而使用合成的模式空間重新啟動迴圈。如果模式空間 不包含換行符,則會像發出d命令那樣啟動正常的新迴圈
N追加下一行

[root@localhost ~]# cat xbz.txt 
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
available on your system.
[root@localhost ~]# sed -n '/Operator$/{N;p}' xbz.txt 
Consult Section 3.1 in the Owner and Operator
Guide for a description of the tape drives
[root@localhost ~]# sed -n '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g;p}' xbz.txt 
Consult Section 3.1 in the installation Guide for a description of the tape drives
[root@localhost ~]# sed '/Operator$/{N;s/Owner and Operator\nGuide/installation Guide/g}' xbz.txt 
Consult Section 3.1 in the installation Guide for a description of the tape drives
available on your system.
//我們假設想要將“Owner and 0perator Guide”換成“lnstallation Guide”,但是我們發現它出現在文件中的兩行上,“Operator”和“Guide”被分開了。
Owner and Operator Guide 換成 installation Guide
空格用\n

D多行刪除

[root@localhost ~]# cat test

This is the header line.
This is a data line.

This is the last line.
[root@localhost ~]# sed '/^$/{N ; /header/D}' test //刪除模式空間的第一行
This is the header line.
This is a data line.

This is the last line.

P多行列印

[root@localhost ~]# cat xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/p' xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;p}' xxb 
Here are examples of the UNIX
System. Where UNIX
System appears, it should be the UNIX
Operating System.
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{p}}' xxb
Here are examples of the UNIX
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;p}}' xxb
Here are examples of the UNIX Operating 
System. Where UNIX
[root@localhost ~]# sed -n '/UNIX$/{N;/\nSystem/{s// Operating &/g;P;D;p}}' xxb
Here are examples of the UNIX Operating 
System. Where UNIX Operating 

保持空間

命令 縮寫 功能
Hold h(複製)或H (追加) 上傳 將模式空間的內容複製或追加到保持空間
Get g或G下載 將保持空間的內容複製或追加到模式空間
Exchange x 交換保持空間和模式空間的內容
[root@localhost ~]# cat abc
1
2
11
22
111
222
[root@localhost ~]# sed '/1/{h;d};/2/G' abc //匹配1將內容放入保持空間,刪除,在將匹配2的內容追加模式空間
2
1
22
11
222
111

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在之前關於資源與工序的場景中寫了一篇不同資源與工序組合下,APS設計難度的文章. 並針對多工序、多工序場景下排程的初步設計。關於生產計劃排程的種類及其特性. ...
  • Hello,大家好呀,前兩篇文章,我們說了下關於全鏈路壓測的意義、整體架構,以及5種壓測的方案。 前面兩篇基本都屬於比較理論的內容,今天這篇咱們來點實踐的東西,手把手帶你搞出一個壓測來 如果不清楚之前兩篇的文章的小伙伴,可以先看下,在這裡 7 環境準備 7.1 環境服務列表 需要在虛擬機或者linu ...
  • 前言 最近想做一個Web版的即時聊天為後面開發的各項功能做輔助,就需要瀏覽器與伺服器能夠實時通訊。而WebSocket這種雙向通信協議,就很合適用來實現這種需求。 本篇文章主要解決C#如何實現WebSocket服務端和Javascript客戶端基於wss協議的安全通信問題。 本文代碼已開源至Gith ...
  • 日常工作中有時候會遇到需要將程式直接在伺服器上運行,而不依賴於 IIS 托管的情況,直接運行有兩種方式,一種是部署為 服務模式,另一種則是 直接啟動 .NET 發佈之後的 exe 文件以 控制台模式運行,控制台模式運行主要問題是伺服器在重新啟動之後不會自動啟動,當然也可以選擇配置 Windows 計 ...
  • 今天我們來介紹一下 Bootstrap Blazor 中 Table 組件的虛擬滾動行,什麼是虛擬滾動呢,我查到的解釋是:只渲染可視區域的列表項,非可見區域的 完全不渲染,在滾動條滾動時動態更新列表項。 然後很明顯,在實際應用中不可能實現“非可見區域的 完全不渲染”,這樣的體驗效果太差了,下拉直接空 ...
  • 在VMware虛擬機下centOS7下配置橋接網路 首先,在以下的配置都操作好之後,要確認宿主機的網路連接方式, 若為需要認證的網路,則可能會出現宿主機與虛擬機能互相ping,但虛擬機不能ping外網的情況 一、虛擬機配置 確保虛擬機為關機的狀態,在VMware中編輯一欄打開虛擬網路編輯器,點擊更改 ...
  • 數據結構概述: 程式 = 數據結構 + 演算法 演算法:一些計算方法,解決問題的流程/步驟(順序、分支、迴圈......),通俗的說,演算法相當於邏輯,小部分已經被人們發掘出來了(這裡的小部分指的是書本上講的一些經典的解決一類問題的方法),解決問題的一種模式。 數據結構:將數據按照某一種特定的結構(方法) ...
  • Set A Light 3D Studio for Mac是一款可以幫助攝影工作者對3D室內攝影進行燈光位置調整的軟體,你可以清楚的瞭解到不同位置的燈光怎麼佈局。Set A Light 3D Studio Mac模擬影樓的效果,使用它可以預先在PC或Mac上搭建的照明設置,逼真地模擬預期的畫面效果和 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...