可以使用正則表達式查找一行後使用一個步驟嗎?正則表達式後的sed步驟
例如,
對於文件
A
B
C
D
E
F
這工作,
sed '2~2p' -n
B
D
F
但這不起作用
sed '/B/~2p' -n
我對未知的命令指責〜
個感謝
可以使用正則表達式查找一行後使用一個步驟嗎?正則表達式後的sed步驟
例如,
對於文件
A
B
C
D
E
F
這工作,
sed '2~2p' -n
B
D
F
但這不起作用
sed '/B/~2p' -n
我對未知的命令指責〜
個感謝
如果你讀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
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
這裏有一個方法你可以在awk中實現同樣的事情,如果你有興趣:
awk '/B/,0 {i++}i%2' file
當模式匹配時,範圍運算符的計算結果爲true,並在文件結尾保持爲真。雖然這是真的,但i
會增加,當它是奇數時,會打印此行。
上述版本適用於每隔一行打印,但不適用於每行N
行的更一般情況。爲了做到這一點,你可以稍微修改它是這樣的:
awk '/B/,0 {i++} i%N==1' file
其中N
是你的一步。
您的預期結果是什麼? – Subbeh