2015-07-02 58 views
0

我正在編輯兩個模式之間的數據,而且我遇到了一個問題,即sed無法匹配背靠背的模式,因爲第一個模式與第二個模式發生在同一行模式。sed - 處理行兩次或快退

我的數據的結構看起來是這樣的:

式樣2式樣1
數據
DATA_1 ...
DATA_2 ...
數據
PATTERN2部首PATTERN1
數據
DATA_1 ...
DATA_2 ...
數據
數據
數據
PATTERN2
...

和我的sed的命令如下所示:

sed '/PATTERN1/,/PATTERN2/ {s/DATA_[12]/SUB/g}' myFile 

圖案之間的線的數量是動態的,並且沒有其他可靠的模式對其他搜索比什麼是在標題行中打印。標題行是數據塊結束的唯一指示符。

是否有與'倒退'一行相反的'n'?

謝謝!

+0

將新行追加到緩衝區並應用您的更改,然後您可以通過查看換行符之前的部分來進一步處理上一行。 - 或者將該行放入保留空間並在檢查下一行時進行交換。 – ShellFish

+0

...這是關於XML或JSON的呢? – Wintermute

+0

爲該樣本輸入顯示您想要的輸出。 – Cyrus

回答

0

這可能爲你工作(GNU SED):

sed ':a;/PATTERN1/{:b;s/DATA_[12]/SUB/g;n;/PATTERN2/!bb;ba}' file 

這使用上遇到式樣2,檢查式樣1 goto語句。