modello sed match N volte


14

Voglio dividere un file in blocchi con 2 parole ciascuno.

$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

Mi aspettavo che l'ultimo comando fornisse lo stesso risultato di quello precedente. Che c'è?

Risposte:


17

Scusa, sembra che l'ho capito subito dopo la pubblicazione.

Deve esserlo

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

Apparentemente sono necessarie le parentesi per consentire a sed di applicare la {2}condizione sull'intero modello word.e non solo sullo spazio precedente.


3
o usaresed -E 's/(word. ){2}/&\n/g' tmp
Cyrus,


1

Per il caso generale di corrispondenza di N volte:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.