sed使用範例

2022-05-06 06:12:10 字數 3640 閱讀 9952

本文同時發表在

記錄下sed編譯器的常見使用方法。

sed編輯器基於輸入到命令列的或者是儲存在文字檔案中的命令來處理資料流中的資料。每次從輸入中讀取一行,用編輯器命令匹配資料,修改資料,輸出到stdout。在流編輯器將所有命令與一行資料匹配之後,它會讀取下一行資料並重複此過程。

s/pattern/replacement/flags
關於flags:

其中:-n和p一起使用,只會輸出被substitute命令修改過的行

$ echo -e "this is test test\nthis is no" | sed -n 's/test/no/p'    

this is no test

預設,sed使用的命令會作用於所有行,使用行定址使命令作用於特定的行。

兩種方式:

[address]command
或者

address
數字方式
$ echo -e "one 1\ntwo 1\nthree 1" | sed "2,$ s/1/2/"  

one 1

two 2

three 2

\(代表到最後一行,\)和s之間有空格。

文字模式

/pattern/command
pattern可以為正規表示式。

$ echo -e "one 123\ntwo 456\nthree 789" | sed "/one/s/123/number/"

one number

two 456

three 789

組合命令
$ echo -e "one 123\ntwo 456\nthree 789" | sed "2"

one 123

hehe 444

three 789

或者:

$ echo -e "one 123\ntwo 456\nthree 789" | sed "2"

one 123

hehe 444

three 789

上面的兩種方法均適用。

$ echo -e "one\ntwo\nthree\nfour" | sed "/two/d"            

onethree

four

使用兩個文字模式刪除某個範圍內的行

$ echo -e "one\ntwo\nthree\nfour" | sed "/one/,/three/d"

four

sed '[address]command\

new line'

$ echo -e "one\ntwo\nthree\nfour" | sed "$ a\five"

onetwo

three

four

five

$ echo -e "one\ntwo\nthree\nfour" | sed "3c\change"

onetwo

change

four

使用區間:

$ echo -e "one\ntwo\nthree\nfour" | sed "1,2c\change" 

change

three

four

sed會用這一行文字替換這兩行,而不是逐一修改。

轉換命令是唯一可以處理單個字元的sed編輯器命令。

[address]y/inchars/outchars
將inchars和outchars進行一對一對映,如果長度不同,會產生一條錯誤訊息。

轉換命令是全域性命令,會自動替換文字行中找到的指定字元的所有例項。

$ echo -e "1\n2\n3\n4" | sed "y/123/789/" 78

94

列印行
$ echo -e "one\ntwo\nthree\nfour" | sed -n '3'

three

substitude

同時顯示原來的和新的行文字。

列印行號

$ echo -e "one\ntwo\nthree\nfour" | sed -n '3'

3three

列出行

l允許列印資料流中的文字和不可列印的asci字元。任何不可列印的字元都用他們的八進位制前加乙個反斜線或者標準c命名法。

$ echo -e "one\ntwo\nthree\nfour" | sed -n 'l'  

one$

two$

three$

four$

向檔案寫入
[address]w filename
$ echo -e "one\ntwo\nthree\nfour" | sed "1,2w data"

onetwo

three

four

$ cat data

onetwo

從檔案讀取資料
[address]r filename
不能對讀取命令使用位址區間,而只能使用單獨乙個行號或者文字模式位址,sed會將檔案中的文字插入到位址之後。

$ cat data

onetwo

$ echo -e "one\ntwo\nthree\nfour" | sed "3r data"

onetwo

three

onetwo

four

可以和刪除命令一起使用來用另乙個檔案的資料替換檔案中的佔位文字。

$ cat data

would the following people:

list

please report to the office

$ sed '/list/' data

would the following people:

zhangyachen

please report to the office

模式空間是一塊活動緩衝區,在sed編譯器執行命令時它會儲存sed編譯器要檢驗的文字。

sed編輯器還利用了另一塊緩衝區域,稱作保持空間。你可以在處理模式空間中其他行是用保持空間來臨時儲存一些行。

命令描述

h將模式空間複製到保持空間

h將模式空間附加到保持空間

g將保持空間複製到模式空間

g將保持空間附加到模式空間

x交換兩個空間的內容

單行next命令

$ cat data

onetwo

three

$ sed '/one/' data

onetwo

three

合併文字行

待續。。。

游標使用範例

declare colname varchar 100 declare cu cname cursor for select name from syscolumns where id object id sh data 1 ok open cu cname fetch next from cu c...

chmod使用範例

chmod 750 a.out 改變 a.out的許可權為750 chmod a x a.out 對所有使用者增加 a.out的執行許可權,a all 表示所有使用者 chmod u rwx a.out 設定屬主的許可權為讀 寫和執行,u user 表示屬主使用者 chmod g rw a.out ...

cmake使用範例

cmake作為一款跨平台的專案構建工具,其使用範圍已經越來越廣,本文以實際專案為例,展示乙個使用該編譯工具的模板。希望我們都能在這些高效的工具幫助下都享受程式設計的樂趣。project src libs modules includes build bin cmakelists 根目錄下cmakel...