motif de correspondance sed N fois

14

Je veux diviser un fichier en morceaux de 2 mots chacun.

$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

Je m'attendais à ce que la dernière commande donne le même résultat que la précédente. Qu'est-ce qui ne va pas?

user13107
la source

Réponses:

17

Désolé, on dirait que je l'ai compris juste après la publication.

Cela doit être

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

Apparemment, les parenthèses sont nécessaires pour laisser sed appliquer la {2}condition sur l'ensemble du motif word.et pas seulement sur l'espace précédent.

user13107
la source
3
ou utilisezsed -E 's/(word. ){2}/&\n/g' tmp
Cyrus
1

Pour le cas général d'appariement de N fois:

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