2014-06-06 61 views
0

可以使用正則表達式查找一行後使用一個步驟嗎?正則表達式後的sed步驟

例如,

對於文件

A 
B 
C 
D 
E 
F 

這工作,

sed '2~2p' -n 
B 
D 
F 

但這不起作用

sed '/B/~2p' -n 

我對未知的命令指責〜

感謝

+1

您的預期結果是什麼? – Subbeh

回答

3

如果你讀SED(GNU sed)的信息/ man頁面,有NO地址格式是這樣的:

/REGEX/~step 

有:

  • FIRST~STEP,需要兩個數字,並且
  • ADDR1, ~N它與之間的範圍匹配和一號線數(無),即no%N==0

我認爲你要麼由兩個以上的困惑,或者沒有檢查手冊頁,只是認爲有「應該是」這樣的地址。

我猜,你想這樣做:

kent$ seq 10|sed -n '/2/,${p;n}' 
2 
4 
6 
8 
10 
+0

有沒有辦法讓這個工作的步長不是2? –

+0

添加更多'n'命令。 – tripleee

+0

@tripleee與我有限的sed知識,這可能是我會做得很好,但我認爲可能有一些比這更好。 –

0

AWK可以做你問,在一個更詳細的方式:

seq 20 | 
awk -v pattern="4" -v step=3 ' 
    !start && $0 ~ pattern {start = NR} 
    start && (NR-start)%step == 0 
' 
4 
7 
10 
13 
16 
19 
0

這裏有一個方法你可以在awk中實現同樣的事情,如果你有興趣:

awk '/B/,0 {i++}i%2' file 

當模式匹配時,範圍運算符的計算結果爲true,並在文件結尾保持爲真。雖然這是真的,但i會增加,當它是奇數時,會打印此行。

上述版本適用於每隔一行打印,但不適用於每行N行的更一般情況。爲了做到這一點,你可以稍微修改它是這樣的:

awk '/B/,0 {i++} i%N==1' file 

其中N是你的一步。