shell高階指令碼 ---sed高階程式設計
阿新 • • 發佈:2019-02-16
shell —sed高階程式設計
一、 xargs
find . -type d -link 2 | xargs -i mkdir -p {}/e =》建立資料夾e
二、sed高階程式設計
sed: stream editor 流編輯器,一行一行的讀取文字內容
1、例子
檔案yourfile
aaa
123
123
123
123
eee
Command: sed -i '/aaa/{:a;n;s/123/xyz/g;/eee/!ba}' youfile
explain: 先匹配aaa, 匹配到後執行大括號裡的語句
n: 讀取下一行
s/123/xyz/g: 將123替換為xyz,全域性替換,同一行中出現幾次替換幾次
:a -> 設定跳轉標籤a
/eee/!ba -> 若當前行匹配不上eee,則跳轉到標籤a處繼續執行,構成一個迴圈。若匹配到eee,則退出迴圈,sed重新對讀入的每行匹配aaa
由於sed沒有加-n靜默選項,所有預設對每行資料處理後都列印
2、 h\H\g\G\x!\n\N\p\P(大寫)-e
h: 拷貝pattern space的內容到holding buffer
H: 追加pattern space 的內容到holding buffer
g: 獲取holding buffer 的內容,並替換pattern space
G: 獲取holding buffer 的內容,並追加pattern space
!: 表示後面的命令對所有沒有被選定的行發生作用
x: 互換pattern space和holding buffer中的文字
n:讀取下一行文字到pattern space,並從下一條命令而不是第一條命令開始對其處理,並且p列印只針對新加入的行
N: 讀取下一行文字到pattern space並將pattern space空間中的行當做一行處理,p列印針對所有的行
P: 列印pattern space中的第一行(大寫)
p: 列印pattern space中的最後一行
-e: 允許多點編輯 如: sed -e '/test/h' -e '$G' file -> 讀取file中的所有的行,一次讀取一行,當讀取的當前行匹配test時,將行替換holding模式空間內容(h),當讀取到最後一行($)時,將holding空間中的內容追加到模式空間(G),並預設資料
-n: 使用安靜模式,在一般sed的用法中,所有來自stdin 的資料一般都會被列出到螢幕上,加-n後,則不會輸出,除非用p命令
3、 例子
// file
aaa bbb
432
aaa
1234343
bbb
34534
Demand: 獲取aaa和bbb之間的內容,並打印出來
Command2: sed -n '/aaa/{/bbb/ba;:c;N;/bbb/!bc;p;b;:a;p;}' file
explain: 讀取檔案file,若當前行命中aaa,且當前行命中bbb,則跳轉到標籤a處執行列印(不跨行);否則,讀取下一行,並判斷是否命中bbb,如果沒有命中,則跳轉到標籤c處,並繼續判斷是否命中bbb,如果命中了,則列印,並跳轉到結尾