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?

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.