本文同時發表在
記錄下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...