1. 程式人生 > >文本三劍客之sed

文本三劍客之sed

數據 sed som 默認 如果 模式 開始 新的 一行

sed自帶行編輯器,系統默認行為。 sed用法: sed [option].. ‘script‘ inputfile... 常用選項: -n:不輸出模式空間內容到屏幕,即不自動打印 -e:多點編輯 -f: /PATH/SCRIPT_FILE:從指定文件讀取編輯腳本 -r:支持使用擴展正則表達式 -i:.bak:備份文件並原處編輯 scipt:“地址命令” sed工具: 地址定界: 1、不給地址:對全文進行處理 2、單地址: #:指定的行,$:最後一行 /pattern/:被此處模式所能匹配到的每一行 3、地址範圍: #,# #,+# /pat1/,/pat2/ #,/pat1/ 4、~:步進 1~2奇數行 2~2偶數行
編輯命令:
d:刪除模式空間匹配的行,並立即啟用下一輪循環
p:打印當前模式空間內容,追加到默認輸出之後
a[\]test:在指定行後面追加文本
支持使用\n實現多行追加
i[\]test :在行前插入文本
c[\]test: 替換行為單行或多行文本
w /path/somefile:保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中  匹配到的行後
=:為模式空間中的行打印行號
!:模式空間中匹配行取反處理

s///:查找替換,支持使用其他分隔符,s@@2,s###
替換標記:
g:行內全局替換
p:顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
sed示例:
sed   ‘2p‘    /etc/passwd
sed -n  ‘2p‘   /etc/passwd
sed-n   ‘1,4p‘   /etc/passwd
sed -n  ‘/root/p‘   /etc/passwd
sed -n  ‘2,/root/p‘  /etc/passwd 從2行開始
sed -n   ‘/^$/=‘    fle 顯示空行行號
sed -n -e    ‘/^$/p‘  -e  ‘/^$/=‘   file
sed    ‘root/a\superman‘   /etc/passwd行後
sed    ‘root/i\superman‘   /etc/passwd行前
sed    ‘root/c\superman‘  /etc/passwd代替行
sed示例:
sed   ‘/^$/d‘  file
sed   ‘1,10d‘   file
nl /etc/passwd| sed  ‘2,5d‘
nl /etc/passwd| sed  ‘2a tea‘
sed ‘s/test/mytest/g‘ example
sed -n   ‘s/root/&superman/p‘   /etc/passwd 單詞後
sed -n   ‘s/root/superman&/p‘   /etc/passwd單詞前
sed -e    ‘s/dog/cat/‘    -e   ‘s/hi/lo/‘   pets
sed -i.bak    ‘s/dog/cat/g‘    pets
高級編輯命令:
p: 打印模式空間開端至\n內容,並追加到默認輸出之前
h: 把模式空間中的內容覆蓋至保持空間中
H:把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G:從保持空間取出內容追加至模式空間
x:把模式空間中的內容與保持空間中的內容進行互換
n:讀取匹配到的行的下一行覆蓋至模式空間
N:讀取匹配到的行的下一行追加至模式空間
d:刪除模式空間中的行
D:如果模式空間包含換行符,則刪除知道第一個換行符的模式空間中的文本,
並不會讀取新的輸入行,而使用合成的模式空間重新啟動循環。如果模式空間
不包含換行符,則會想發出d命令那樣啟動正常的新循環
sed示例:
sed-n ‘n;p‘ FILE
sed ‘1!G;h;$!d FILE
sed ‘N;D  ‘  FILE
sed ‘$!d‘ FILE
sed ‘$!N;$!D‘ FILE
sed     ‘G‘    FILE
sed     ‘g‘     FILE
sed    ‘/^$/d;G‘   FILE
sed ‘n;d‘ FILE
sed -n  ‘1!G;h;$p‘ FILE

命令
用法
N
讀取新的輸入行,並將該行追加到模式空間現有內容之後,來創建多行模式空間。創建後的多行模式空間中,原有內容和新內容用換行符"\n"來分割。
而執行N命令之後,將會繼續執行,N之後的命令,N之後命令的對象則是我們新的模式空間的內容。
註意:多行模式空間中,^匹配整個空間的開始,$匹配整個空間的結尾,
比如上面的 1\n2\n3 開頭是1,結尾是3
$!N,最後一行,不執行N命令
D
刪除模式空間中,從頭開始到第一個嵌入的換行符為止。
它並不會導致新行的輸入,而是會返回腳本的頂端,將這些指令應用於空間中剩余的內容
P
輸出模式空間中,從頭開始到第一個嵌入的換行符為止。
實際運用中,P經常放到N之後,P之前
n
輸出當前模式空間的內容,讀取下一行替換當前行,替換之後,n命令之後的命令作用到新行上
d
情況模式空間,並導致新行的讀入,此時控制將忽略d之後的命令,並轉移到腳本的頂端,作用在新的輸入行上
p
打印整個模式空間的內容。其他的對模式空間,沒啥影響了

文本三劍客之sed