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語句和迴圈 來為資...