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
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...