Linux shell文字三劍客之sed的使用

2021-09-06 03:58:08 字數 2292 閱讀 6522

sed 能夠對文字檔案進行增刪改查等操作。

sed 擁有兩個緩衝區,活躍模式空間(active pattern space)與輔助保持空間(auxiliary hold space), 簡稱為活躍區和暫存區,且這兩個緩衝區預設都為空。

sed 的基本操作只需要用到活躍區,sed的高階操作需要活躍區與暫存區的相互配合。

在 sed 的基本操作中,sed 從輸入流中得到當前處理的行,會先刪除結尾的換行符,儲存在乙個臨時緩衝區,即活躍區;然後 sed 會在活躍區中處理文字,處理完成後加上換行符,並且傳送到 stdout (如果沒有-n選項),再接著處理下一行,如此迴圈往復,直至檔案末尾,這就是 sed 的基本工作原理。由此可見,sed 在預設情況下是不修改原檔案的。

除非使用特殊命令 (如 「d」), 否則活躍區的資料將在兩個週期之間被刪除。

在 sed 的高階操作中,多了乙個暫存區,暫存區是與活躍區進行互動的,且以活躍區為主,暫存區為輔,sed 匹配的內容最終都得經由活躍區傳輸至 stdout 。

sed 的完整語法是

# 測試資料

# 生成1到100

seq 1 100 > nums.txt

cat>words.txt<

hello world

common methods to solve matrix related problem include dfs, bfs, dynamic programming, etc.

hello123 world123

-hello-

_hello_

eof

# 生成ascii表中a到z,包含a-za-z

printf

"%s\n"

> chars.txt

cat>command.txt<

pwdecho

"hello world"

eof

-n 靜默模式,禁止自動列印到標準輸出

-e script 可以多次使用-e,將命令加入命令集。在活躍區,命令集會執行處理輸入

sed -n -e '1,3p' -e '2,4p' nums.txt
-f script-file 將命令寫入檔案,使用-f,加入命令集

-i[suffix] 原地編輯檔案

-e -r 使用拓展正則

-z 和grep -z類似,常用來處理檔名帶空格的檔案

sed 指令碼命令的語法為

[addr]x[options]

x是sed單字元的命令;addr是可選的行位址,如果指定,則在匹配的行執行命令x;options是一些sed命令需要的引數。

addr (沒有addr就預設是所有行)

x

sed

's/1/a/' nums.txt

sed's/1/a/2' nums.txt

sed -n 's/1/a/p' nums.txt

sed -n 's/1/a/2p' nums.txt

w filename 將活躍區內容寫入檔案

sed -n 'w file.txt' nums.txt
x 交換活躍區與暫存區內容

y/src/dst/ 將活躍區的內容,按照匹配src的字元轉化dst相同位置的字元

sed

'y/123/abc/' nums.txt

z 清空活躍區內容

# 注釋,直到下一行

命令組

sed -n '1p;2p;100p' nums.txt

sed -n '1' nums.txt

= 列印當前輸入行數

sed -n '=' nums.txt
: label 給分支命令(b, t, t)指定label位置

# 定義標籤t;使用n輸入兩行;將\n替換為,;使用b跳到標籤t迴圈

# 將所有換行替換為,

sed':t;n;s/\n/,/;b t'

文字三劍客

檔案萬用字元和正規表示式 文字過濾工具grep linux系統中,一切皆檔案。強大的文字編輯和處理工具便必不可少了,在linux系統中,有文字處理三劍客 grep,sed,awk。在進行介紹三大工具前,我們先總結一下檔案萬用字元和正規表示式。檔案萬用字元主要就是對檔案的查詢進行檔名的模糊查詢,而正規...

文字三劍客 sed

sed是linux中支援正規表示式的流編輯器 作用 修改和替換文字 sed擁有兩個兩個空間,分別是pattern space和hold space pattern space是處理資料的地方 注意 每處理一行資料後,模式空間就會清空 hold space是臨時存放資料的地方 模式空間 pattern...

文字三劍客 gawk基礎

gawk程式是unix中原始awk程式的gnu版本。gawk程式讓流編輯器邁上了乙個新的台階,它提供了一種程式語言而不只是編輯器命令。在gawk程式語言中,可以完成下面的事情 1 定義變數來儲存資料 2 使用算數和字串操作符來處理資料 3 使用結構化程式設計概念 比如if then語句和迴圈 來為資...