sed padrão de correspondência N vezes

11

Eu quero dividir um arquivo em partes com 2 palavras cada.

$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

Eu esperava que o último comando desse o mesmo resultado que o anterior. O que está errado?

    
por user13107 13.09.2014 / 09:37

3 respostas

14

Desculpe, parece que descobri logo após postar.

Precisa ser

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

Aparentemente, os colchetes são necessários para permitir que o sed aplique {2} condição em todo o padrão word. e não apenas no espaço anterior.

    
por 13.09.2014 / 09:41
1

Outra maneira em sed :

$ sed 's/ /\x1&\x2/g; s/\([^\x1]*[\x1][^\x2]*[\x2][^\x1]*\)[\x1][^\x2]*[\x2]/\
/g; s/[\x1\x2]//g'
    
por 13.09.2014 / 10:31
1

Para o caso geral de correspondência de N vezes:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
    
por 13.09.2014 / 10:54