padrão de correspondência sed N vezes


14

Eu quero dividir um arquivo em pedaços 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?

Respostas:


17

Desculpe, parece que eu descobri isso logo após a postagem.

Precisa ser

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

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


3
ou usosed -E 's/(word. ){2}/&\n/g' tmp
Cyrus


1

Para o caso geral de combinar N vezes:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.