sed:檔案流編輯器,可以對匹配內容進行改動,並顯示在螢幕上,原始檔不改動,當然也可以選擇改動原始檔。
格式:
sed [選項] 'command' file(s)
sed [選項] -f scriptfile file(s)
選項:
-h或--help:顯示幫助;
-n或--quiet或——silent:僅顯示script處理後的結果,一般配合動作命令p使用。
-v或--version:顯示版本資訊。
command的命令(摘自linux 命令大全):
a\ 在當前行下面插入文字。
i\ 在當前行上面插入文字。
c\ 把選定的行改為新的文字。
d 刪除,刪除選擇的行。
d 刪除模板塊的第一行。
s 替換指定字元
h 拷貝模板塊的內容到記憶體中的緩衝區。
h 追加模板塊的內容到記憶體中的緩衝區。
g 獲得記憶體緩衝區的內容,並替代當前模板塊中的文字。
g 獲得記憶體緩衝區的內容,並追加到當前模板塊文字的後面。
l 列表不能列印字元的清單。
n 讀取下乙個輸入行,用下乙個命令處理新的行而不是用第乙個命令。
n 追加下乙個輸入行到模板塊後面並在二者間嵌入乙個新行,改變當前行號碼。
p 列印模板塊的行。
p(大寫) 列印模板塊的第一行。
q 退出sed。
b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。
r file 從file中讀行。
t label if分支,從最後一行開始,條件一旦滿足或者t,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾。
t label 錯誤分支,從最後一行開始,一旦發生錯誤或者t,t命令,將導致分支到帶有標號的命令處,或者到指令碼的末尾。
w file 寫並追加模板塊到file末尾。
w file 寫並追加模板塊的第一行到file末尾。
! 表示後面的命令對所有沒有被選定的行發生作用。
= 列印當前行號碼。
# 把注釋擴充套件到下乙個換行符以前。
標記:
g 表示行內全面替換。
p 表示列印行。
w 表示把行寫入乙個檔案。
x 表示互換模板塊中的文字和緩衝區中的文字。
y 表示把乙個字元翻譯為另外的字元(但是不用於正規表示式)
\1 子串匹配標記
& 已匹配字串標記
正則字符集:
^ 匹配行開始,如:/^sed/匹配所有以sed開頭的行。
$ 匹配行結束,如:/sed$/匹配所有以sed結尾的行。
. 匹配乙個非換行符的任意字元,如:/s.d/匹配s後接乙個任意字元,最後是d。
* 匹配0個或多個字元,如:/*sed/匹配所有模板是乙個或多個空格後緊跟sed的行。
匹配乙個指定範圍內的字元,如/[ss]ed/匹配sed和sed。
[^] 匹配乙個不在指定範圍內的字元,如:/[^a-rt-z]ed/匹配不包含a-r和t-z的乙個字母開頭,緊跟ed的行。
.... 匹配子串,儲存匹配的字元,如s/loveloveable/\1rs,loveable被替換成lovers。
& 儲存搜尋字元用來替換其他字元,如s/love/**&**/,love這成**love**。
\< 匹配單詞的開始,如:/\匹配單詞的結束,如/love\>/匹配包含以love結尾的單詞的行。
x\ 重複字元x,m次,如:/0\/匹配包含5個0的行。
x\ 重複字元x,至少m次,如:/0\/匹配至少有5個0的行。
x\ 重複字元x,至少m次,不多於n次,如:/0\/匹配5~10個0的行。
基本用法:
salary.txt內容,全程,簡稱,日期,工資:
lin sam,sam,2012-01-11,1000
li tom,tom,2012-01-11,2000
zhou john,john,2012-01-13,3000
lin sam,sam,2012-01-11,2000
li tom,tom,2013-01-20,3000
zhou john,john,2013-01-28,4000
替換:
把sam替換成sam(不改變原始檔)
sed 's/sam/sam/' salary.txt #替換每行第乙個sam
sed 's/sam/sam/g' salary.txt #替換每行所有的sam
上面列印所有文字,若只列印發生替換的行,用-n和p命令
sed -n 's/sam/sam/gp' salary.txt
若要改變原始檔,加-i
sed -i 's/sam/sam/g' salary.txt #把原始檔的所有sam替換成sam
只改變指定的行
sed '1,3 s/000/111/g' salary.txt #第一到第三行的000替換成111
每行從第2處匹配開始替換
sed 's/sam/sam/2g' salary.txt
將第2~4行 替換成 "new 2-4 lines"
sed '2,4c new 2-4 lines' salary.txt
刪除:
sed '2,4d' salary.txt #刪2~4行
sed '4,$d' salary.txt #刪第4到最後一行
sed '/^$/d' salary.txt #刪除空白行
sed '/^lin/d' salary.txt #刪除以lin開頭的行
sed '/sam/,/tom/d' salary.txt #刪除 包含sam行 到 包含tom行 之間的所有行
新增
sed '2a new line' salary.txt #在第2行後面新增
sed '2i new line' salary.txt #在第2行前面插入
新增多行,在第2行前面插入兩行new line 和 new line2
sed '2i new line\
> new line2' salary.txt
定界符
習慣了用/作為定界符,也可以用其他符號
sed 's:sam:sam:g' salary.txt #以:作為定界符
sed 's~sam~sam~g' salary.txt #以~作為定界符
匹配字串
匹配到的字串用 & 代替,&代表的所有匹配到的字串,\子字串匹配
\(..\) 用於匹配子串,\n表示第n個匹配到子字串,\1表示第乙個匹配到的
sed 's/\(\w*\) \(\w*\)/\2 \1/' salary.txt #把第乙個匹配到的\w*\ 跟第乙個交換了一下位置
指令碼
把上面的命令寫入sedscript:
s/\(\w*\) \(\w*\)/\2 \1/
執行:
sed -f sedscript salary.txt
得到同樣的效果 Sed 流文字編輯器
一 sed流文字編輯器介紹 sed stream editor 本質上是乙個編輯器,但是它是非互動式的,這點與vim不同 同時它又是面向字元流的,輸入的字元流經過sed的處理後輸出。這兩個特性使得sed成為命令列下面非常有用的乙個處理工具,同時sed能夠完美的配合正規表示式使用。這裡先談一下互動式和...
編輯文字(EditText)
先看一下它的基本屬性 2.xml檔案 android layout width match parent android layout height match parent android orientation vertical android padding 5dp android layou...
sed 流編輯命令
sed 1,2d hosts 刪除第一行第二行 原檔案不變 sed i 1,2d hosts sed d hosts 刪除最後一行 sed s local local g hosts local 替換成 local sed 1 i000000 hosts key i上一行新增str sed 1 a0...