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
  • PasteSpider是什麼? 一款使用.net編寫的開源的Linux容器部署助手,支持一鍵發佈,平滑升級,自動伸縮, Key-Value配置,項目網關,環境隔離,運行報表,差量升級,私有倉庫,集群部署,版本管理等! 30分鐘上手,讓開發也可以很容易的學會在linux上部署你得項目! [從需求角度介 ...
  • SQLSugar是什麼 **1. 輕量級ORM框架,專為.NET CORE開發人員設計,它提供了簡單、高效的方式來處理資料庫操作,使開發人員能夠更輕鬆地與資料庫進行交互 2. 簡化資料庫操作和數據訪問,允許開發人員在C#代碼中直接操作資料庫,而不需要編寫複雜的SQL語句 3. 支持多種資料庫,包括但 ...
  • 在C#中,經常會有一些耗時較長的CPU密集型運算,因為如果直接在UI線程執行這樣的運算就會出現UI不響應的問題。解決這類問題的主要途徑是使用多線程,啟動一個後臺線程,把運算操作放在這個後臺線程中完成。但是原生介面的線程操作有一些難度,如果要更進一步的去完成線程間的通訊就會難上加難。 因此,.NET類 ...
  • 一:背景 1. 講故事 前些天有位朋友在微信上丟了一個崩潰的dump給我,讓我幫忙看下為什麼出現了崩潰,在 Windows 的事件查看器上顯示的是經典的 訪問違例 ,即 c0000005 錯誤碼,不管怎麼說有dump就可以上windbg開幹了。 二:WinDbg 分析 1. 程式為誰崩潰了 在 Wi ...
  • CSharpe中的IO+NPOI+序列化 文件文件夾操作 學習一下常見的文件、文件夾的操作。 什麼是IO流? I:就是input O:就是output,故稱:輸入輸出流 將數據讀入記憶體或者記憶體輸出的過程。 常見的IO流操作,一般說的是[記憶體]與[磁碟]之間的輸入輸出。 作用 持久化數據,保證數據不再 ...
  • C#.NET與JAVA互通之MD5哈希V2024 配套視頻: 要點: 1.計算MD5時,SDK自帶的計算哈希(ComputeHash)方法,輸入輸出參數都是byte數組。就涉及到字元串轉byte數組轉換時,編碼選擇的問題。 2.輸入參數,字元串轉byte數組時,編碼雙方要統一,一般為:UTF-8。 ...
  • CodeWF.EventBus,一款靈活的事件匯流排庫,實現模塊間解耦通信。支持多種.NET項目類型,如WPF、WinForms、ASP.NET Core等。採用簡潔設計,輕鬆實現事件的發佈與訂閱。通過有序的消息處理,確保事件得到妥善處理。簡化您的代碼,提升系統可維護性。 ...
  • 一、基本的.NET框架概念 .NET框架是一個由微軟開發的軟體開發平臺,它提供了一個運行時環境(CLR - Common Language Runtime)和一套豐富的類庫(FCL - Framework Class Library)。CLR負責管理代碼的執行,而FCL則提供了大量預先編寫好的代碼, ...
  • 本章將和大家分享在ASP.NET Core中如何使用高級客戶端NEST來操作我們的Elasticsearch。 NEST是一個高級別的Elasticsearch .NET客戶端,它仍然非常接近原始Elasticsearch API的映射。所有的請求和響應都是通過類型來暴露的,這使得它非常適合快速上手 ...
  • 參考delphi的代碼更改為C# Delphi 檢測密碼強度 規則(仿 google) 仿 google 評分規則 一、密碼長度: 5 分: 小於等於 4 個字元 10 分: 5 到 7 字元 25 分: 大於等於 8 個字元 二、字母: 0 分: 沒有字母 10 分: 全都是小(大)寫字母 20 ...