unix的sed 用法介紹 收藏
轉自:http://blog.chinaunix.net/u2/75321/showart_1164426.html
?sed是一個非交互性性文本編輯器,它編輯文件或標準輸入導出的文件拷貝。標準輸入可能是來自鍵盤、文件重定向、字符串或變量,或者是一個管道文件。sed可以隨意編輯小或大的文件,有許多sed命令用來編輯、刪除,并允許做這項工作時不在現(xiàn)場。sed一次性處理所有改變,因而變得很有效,對用戶來說,最重要的是節(jié)省了時間。sed必須通過行號和正則表達式指定要改變的文本行
sed怎樣讀取數(shù)據(jù):
??? sed從文件的一個文本行或從標準輸入的幾種格式中讀取數(shù)據(jù),將之拷貝到一個編輯緩沖區(qū),然后讀命令行或腳本的第一條命令,并使用這些命令查找模式或定位行號編輯它,重復過程直到命令結束
sed命令的調用:
??? 在命令行鍵入命令;將sed命令插入腳本文件,然后調用sed;將sed命令插入腳本文件,并使sed腳本可執(zhí)行
??? sed [option] sed命令 輸入文件??????????? 在命令行使用sed命令,實際命令要加單引號
??? sed [option] -f sed腳本文件 輸入文件???? 使用sed腳本文件
??? sed腳本文件 [option] 輸入文件??????????? 第一行具有sed命令解釋器的sed腳本文件
??? option如下:
????? n 不打印; sed不寫編輯行到標準輸出,缺省為打印所有行(編輯和未編輯),p命令可以用來打印編輯行
????? c 下一命令是編輯命令,使用多項編輯時加入此選項
????? f 如果正在調用sed腳本文件,使用此選項,此選項通知sed一個腳本文件支持所用的sed命令,如
????????? sed -f myscript.sed input_file? 這里myscript.sed即為支持sed命令的文件
??? 使用重定向文件即可保存sed的輸出
使用sed在文本中定位文本的方式:
??? x?????? x為一行號,比如1
??? x,y???? 表示行號范圍從x到y(tǒng),如2,5表示從第2行到第5行
??? /pattern/??? 查詢包含模式的行,如/disk/或/[a-z]/
??? /pattern/pattern/?? 查詢包含兩個模式的行,如/disk/disks/
??? /pattern/,x? 在給定行號上查詢包含模式的行,如/disk/,3
??? x,/pattern/? 通過行號和模式查詢匹配行,如 3,/disk/
??? x,y!??? 查詢不包含指定行號x和y的行
基本sed編輯命令:
??? p????? 打印匹配行????????????????????? c\??? 用新文本替換定位文本
??? =????? 顯示文件行號??????????????????? s???? 使用替換模式替換相應模式
??? a\???? 在定位行號后附加新文本信息??????? r???? 從另一個文本中讀文本
??? i\???? 在定位行號后插入新文本信息??????? w???? 寫文本到一個文件
??? d????? 刪除定位行????????????????????? q???? 第一個模式匹配完成后退出或立即退出
??? l????? 顯示與八進制ASCII代碼等價的控制字符??????? y? 傳送字符
??? n????? 從另一個文本中讀文本下一行,并附加在下一行?? {}???? 在定位行執(zhí)行的命令組
??? g????? 將模式2粘貼到/pattern n/
基本sed編程舉例:
??? 使用p(rint)顯示行: sed -n '2p' temp.txt?? 只顯示第2行,使用選項n
??? 打印范圍:? sed -n '1,3p' temp.txt???????? 打印第1行到第3行
??? 打印模式:? sed -n '/movie/'p temp.txt???? 打印含movie的行
??? 使用模式和行號查詢:? sed -n '3,/movie/'p temp.txt?? 只在第3行查找movie并打印
??? 顯示整個文件:? sed -n '1,$'p temp.txt????? $為最后一行
??? 任意字符:? sed -n '/.*ing/'p temp.txt???? 注意是.*ing,而不是*ing
??? 打印行號:? sed -e '/music/=' temp.txt
??? 附加文本:(創(chuàng)建sed腳本文件)chmod u+x script.sed,運行時./script.sed temp.txt
??????? #!/bin/sed -f
??????? /name1/ a\???????????? #a\表示此處換行添加文本
??????? HERE ADD NEW LINE.???? #添加的文本內容
??? 插入文本: /name1/ a\ 改成 4 i\ 4表示行號,i插入
??? 修改文本: /name1/ a\ 改成 /name1/ c\ 將修改整行,c修改
??? 刪除文本: sed '1d' temp.txt? 或者 sed '1,4d' temp.txt
??? 替換文本: sed 's/source/OKSTR/' temp.txt???? 將source替換成OKSTR
???????????? sed 's/\$//g' temp.txt???????????? 將文本中所有的$符號全部刪除
???????????? sed 's/source/OKSTR/w temp2.txt' temp.txt 將替換后的記錄寫入文件temp2.txt
??? 替換修改字符串: sed 's/source/"ADD BEFORE" &/p' temp.txt
???????????? 結果將在source字符串前面加上"ADD BEFORE",這里的&表示找到的source字符并保存
??? sed結果寫入到文件: sed '1,2 w temp2.txt' temp.txt
???????????????????? sed '/name/ w temp2.txt' temp.txt
??? 從文件中讀文本: sed '/name/r temp2.txt' temp.txt
??? 在每列最后加文本: sed 's/[0-9]*/& Pass/g' temp.txt
??? 從shell向sed傳值: echo $NAME | sed "s/go/$REP/g"?? 注意需要使用雙引號
快速一行命令:
??? 's/\.$//g'???????? 刪除以句點結尾行
??? '-e /abcd/d'?????? 刪除包含abcd的行
??? 's/[][][]*/[]/g'?? 刪除一個以上空格,用一個空格代替
??? 's/^[][]*//g'????? 刪除行首空格
??? 's/\.[][]*/[]/g'?? 刪除句號后跟兩個或更多的空格,用一個空格代替
??? '/^$/d'??????????? 刪除空行
??? 's/^.//g'????????? 刪除第一個字符,區(qū)別? 's/\.//g'刪除所有的句點
??? 's/COL/(...\)//g'? 刪除緊跟COL的后三個字母
??? 's/^\///g'???????? 刪除路徑中第一個\
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/youxiaxk/archive/2010/03/05/5348945.aspx