pola pertandingan sed N kali

14

Saya ingin membagi file menjadi potongan-potongan dengan 2 kata masing-masing.

$cat tmp
word1 word2 word3 word4 word5 word6 word7
$sed -e 's/word. word. /&\n/g' tmp
word1 word2 
word3 word4 
word5 word6 
word7
$sed -e 's/word. \{2\}/&\n/g' tmp
word1 word2 word3 word4 word5 word6 word7

Saya mengharapkan perintah terakhir untuk memberikan hasil yang sama dengan yang sebelumnya. Apa yang salah?

pengguna13107
sumber

Jawaban:

17

Maaf, sepertinya saya baru tahu setelah memposting.

Itu perlu

sed -e 's/\(word. \)\{2\}/&\n/g' tmp

Rupanya tanda kurung diperlukan untuk membiarkan {2}kondisi berlaku pada seluruh pola word.dan tidak hanya ruang sebelumnya.

pengguna13107
sumber
3
atau gunakansed -E 's/(word. ){2}/&\n/g' tmp
Cyrus
1

Untuk kasus umum pencocokan N kali:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Joseph R.
sumber