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?

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.