sed語句用法

来源:https://www.cnblogs.com/Their-own/archive/2022/09/15/16698239.html
-Advertisement-
Play Games

sed高階用法 sed編輯器 sed是一種流編輯器,流編輯器會在編輯器處理數據之前基於預先提供的一組規則來編輯數據流。 1.sed編輯器工作流程 sed編輯器可以根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中。 sed的工作流程主要包括讀取、執行和顯示三個過程 ...


sed高階用法

sed編輯器

sed是一種流編輯器,流編輯器會在編輯器處理數據之前基於預先提供的一組規則來編輯數據流。

1.sed編輯器工作流程

sed編輯器可以根據命令來處理數據流中的數據,這些命令要麼從命令行中輸入,要麼存儲在一個命令文本文件中。 sed的工作流程主要包括讀取、執行和顯示三個過程:

  • 讀取: sed從輸入流 (文件、管道、標準輸入) 中讀取一行內容並存儲到臨時的緩衝區中(又稱模式空間,pattern space)
  • 執行:預設情況下,所有的sed命令都在模式空間中順序地執行,除非指定了行的地址,否則sed命令將會在所有的行上依次執行
  • 顯示:發送修改後的內容到輸出流。在發送數據後,模式空間將會被清空。在所有的文件內容都被處理完成之前,上述過程將重覆執行,直至所有內容被處理完。

模式空間和保持空間

模式空間:sed處理文本內容行的一個臨時緩衝區,模式空間中的內容會主動列印到標準輸出,並自動清空模式空間

保持空間:sed處理文本內容行的另一個臨時緩衝區,不同的是保持空間內容不會主動清空,也不會主動列印到標準輸出,而是需要sed命令來進行處理

模式空間與保持空間的關係

模式空間:相當於流水線,文本行再模式空間中進行處理;
保持空間:相當於倉庫,在模式空間對數據進行處理時,可以把數據臨時存儲到保持空間;作為模式空間的一個輔助臨時緩衝區,但又是相互獨立,可以進行交互,命令可以定址模式空間但是不能定址保持空間。可以使用高級命令h,H,g,G與模式空間進行交互。

sed命令參數

-n 使用安靜模式.則只有經過sed特殊處理的哪一行才會被列出來
-e 傳送帶(前面執行完傳遞給後面)
-f 跟隨腳本文件名
-r 脫意
-i 直接修改讀取文件

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:把一個或多個字元替換成另一個字元

示例:

#初始
root@localhost ~]# cat test 
a b c
b
c
d

//a的用法
#選擇行下添加
[root@localhost ~]# sed '2a123321' test
a b c
b
123321
c
d
#在匹配的參數下一行進行添加
[root@localhost ~]# sed '/c/a123321' test
a b c
123321
b
c
123321
d

//c的用法
[root@localhost ~]# cat test
a b c
b
c
d
#選擇行進行修改
[root@localhost ~]# sed '3caaa' test 
a b c
b
aaa
d
#將匹配到的參數進行修改
[root@localhost ~]# cat test 
a b c
b
c
d
[root@localhost ~]# sed '/d/caaa' test 
a b c
b
c
aaa

//d的用法
[root@localhost ~]# cat test 
a b c
b
c
d
#將第一行刪除
[root@localhost ~]# sed '1d' test 
b
c
d
#將匹配到的行刪除
[root@localhost ~]# cat test 
a b c
b
c
d
[root@localhost ~]# sed '/b/d' test 
c
d

//i的用法
#選擇行進行插入
[root@localhost ~]# cat test 
a b c
b
c
d
[root@localhost ~]# sed '3i123' test 		
a b c
b
123
c
d
#在匹配的參數前一行進行插入、
[root@localhost ~]# cat test 
a b c
b
c
d
[root@localhost ~]# sed '/b/i123' test 
123
a b c
123
b
c
d

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

//s的用法
#將匹配的每行里的第一個參數進行替換
[root@localhost ~]# cat test 
a b c
b
c
d
[root@localhost ~]# sed 's/b/c/' test 
a c c
c
c
d
#如果一行類出現多次參數,就會出現以下問題
[root@localhost ~]# cat test 
a b c
b
c
d
aa
ac
[root@localhost ~]# sed 's/a/c/' test 
c b c
b
c
d
ca
cc
#想要全部替換需要在最後加上g
[root@localhost ~]# cat test 
a b c
b
c
d
aa
ac
[root@localhost ~]# sed 's/a/c/g' test 
c b c
b
c
d
cc
cc

//n的用法,n讀取下一個輸入行
#此處的n不是sed -n的n的那種用法
[root@localhost ~]# cat test 
a b c
b
c
d
aa
ac
[root@localhost ~]# sed -n '/a/n;p' test 		//匹配到的參數下麵的所有行
b
c
d
ac

//y的用法
#將匹配到的整行都進行修改
[root@localhost ~]# cat test 
a b c
b
c
d
aa
ac
[root@localhost ~]# sed '5y/a/C/' test 
a b c
b
c
d
CC
ac

多行空間模式

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

示例

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

常用命令

h:把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g:從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換

示例

[root@localhost ~]# cat test
1
2
11
22
111
222

#匹配有1的行,h將將模式空間的內容追加到保持空間,d刪除模式空間的內容
[root@localhost ~]# sed '/1/{h;d}' test
2
22
222

此時
模式空間:
空
保持空間:
1
11
111

#匹配有2的行,G將保持空間的內容追加到模式空間
[root@localhost ~]# sed '/1/{h;d};/2/{G}' test
2
1
22
11
222
111

此時
模式空間:
2
1
22
11
222
111

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

-Advertisement-
Play Games
更多相關文章
  • 一、C++中的動態記憶體管理方式 C語言中的動態管理方式是用malloc、free函數,它們在C++仍然可以繼續使用,但是由於在部分地方略顯無能為力,且使用起來比較麻煩,所以C++提出了自己的記憶體管理方式:採用new、delete關鍵字去進行動態記憶體管理。 註意:C語言開闢空間所用的malloc、ca ...
  • 作者:Bai Bing 原文:https://zhuanlan.zhihu.com/p/485029198 遺憾的是,我轉正後看到了大家的能力和努力,也意識到在預期的時間內難以達到我想要的高度,最終經過各方面的考慮,決定放棄這個職位,重新回到外企找回適合我的節奏。 依依不捨的離職後,回想起來,覺得我 ...
  • 我的gRPC之旅。本節介紹微服務架構、強弱類型介面、Rest、gRPC定義,proto編譯方式,並用golang編寫一個簡單的gRPC托管服務和客戶端。在調試中進步,感受gRPC的魅力。 ...
  • 安裝 go https://go.dev/doc/install 安裝以後命令行執行 go version 然後隨便創建一個文件, 比如 hello.go package main import "fmt" func main() { fmt.Println("hello world!") } 這就 ...
  • 本文技術方案支持.Net/.Net Core/.Net Framework 數據分頁,幾乎是任何應用系統的必備功能。但當數據量較大時,分頁操作的效率就會變得很低。大數據量分頁時,一個操作耗時5秒、10秒、甚至更長時間都是有可能的,但這在用戶使用的角度是不可接受的…… 數據分頁往往有三種常用方案。 第 ...
  • 關於/dev/null,以及如何使用它 今天在看MIT的一個課程時,老師給的程式實例中有一個地方沒弄明白: #!/bin/bash echo "Starting program at $(date)" # Date will be substituted echo "Running program ...
  • 源碼安裝apache腳本部署 [root@localhost ~]# ls anaconda-ks.cfg httpd.tar.xz [root@localhost ~]# tar xf httpd.tar.xz 解壓存放腳本的壓縮包 [root@localhost ~]# ls anaconda- ...
  • lrTimelapse for Mac是MAC OS上的一款視頻編輯軟體,lrTimelapse mac是一款配合 Adobe Lightroom、Adobe Camera RAW 和 Adobe After Effects 等程式製作延時攝影的軟體。lrtimelapse mac將帶你到下一個水平 ...
一周排行
    -Advertisement-
    Play Games
  • 1、預覽地址:http://139.155.137.144:9012 2、qq群:801913255 一、前言 隨著網路的發展,企業對於信息系統數據的保密工作愈發重視,不同身份、角色對於數據的訪問許可權都應該大相徑庭。 列如 1、不同登錄人員對一個數據列表的可見度是不一樣的,如數據列、數據行、數據按鈕 ...
  • 前言 上一篇文章寫瞭如何使用RabbitMQ做個簡單的發送郵件項目,然後評論也是比較多,也是準備去學習一下如何確保RabbitMQ的消息可靠性,但是由於時間原因,先來說說設計模式中的簡單工廠模式吧! 在瞭解簡單工廠模式之前,我們要知道C#是一款面向對象的高級程式語言。它有3大特性,封裝、繼承、多態。 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 介紹 Nodify是一個WPF基於節點的編輯器控制項,其中包含一系列節點、連接和連接器組件,旨在簡化構建基於節點的工具的過程 ...
  • 創建一個webapi項目做測試使用。 創建新控制器,搭建一個基礎框架,包括獲取當天日期、wiki的請求地址等 創建一個Http請求幫助類以及方法,用於獲取指定URL的信息 使用http請求訪問指定url,先運行一下,看看返回的內容。內容如圖右邊所示,實際上是一個Json數據。我們主要解析 大事記 部 ...
  • 最近在不少自媒體上看到有關.NET與C#的資訊與評價,感覺大家對.NET與C#還是不太瞭解,尤其是對2016年6月發佈的跨平臺.NET Core 1.0,更是知之甚少。在考慮一番之後,還是決定寫點東西總結一下,也回顧一下.NET的發展歷史。 首先,你沒看錯,.NET是跨平臺的,可以在Windows、 ...
  • Nodify學習 一:介紹與使用 - 可樂_加冰 - 博客園 (cnblogs.com) Nodify學習 二:添加節點 - 可樂_加冰 - 博客園 (cnblogs.com) 添加節點(nodes) 通過上一篇我們已經創建好了編輯器實例現在我們為編輯器添加一個節點 添加model和viewmode ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...
  • 類型檢查和轉換:當你需要檢查對象是否為特定類型,並且希望在同一時間內將其轉換為那個類型時,模式匹配提供了一種更簡潔的方式來完成這一任務,避免了使用傳統的as和is操作符後還需要進行額外的null檢查。 複雜條件邏輯:在處理複雜的條件邏輯時,特別是涉及到多個條件和類型的情況下,使用模式匹配可以使代碼更 ...
  • 在日常開發中,我們經常需要和文件打交道,特別是桌面開發,有時候就會需要載入大批量的文件,而且可能還會存在部分文件缺失的情況,那麼如何才能快速的判斷文件是否存在呢?如果處理不當的,且文件數量比較多的時候,可能會造成卡頓等情況,進而影響程式的使用體驗。今天就以一個簡單的小例子,簡述兩種不同的判斷文件是否... ...
  • 前言 資料庫併發,數據審計和軟刪除一直是數據持久化方面的經典問題。早些時候,這些工作需要手寫複雜的SQL或者通過存儲過程和觸發器實現。手寫複雜SQL對軟體可維護性構成了相當大的挑戰,隨著SQL字數的變多,用到的嵌套和複雜語法增加,可讀性和可維護性的難度是幾何級暴漲。因此如何在實現功能的同時控制這些S ...