patrón de coincidencia sed N veces


14

Quiero dividir un archivo en trozos con 2 palabras cada uno.

$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

Esperaba que el último comando diera el mismo resultado que el anterior. ¿Qué está mal?

Respuestas:


17

Lo siento, parece que lo descubrí justo después de publicar.

Necesita ser

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

Aparentemente, los paréntesis son necesarios para que sed aplique la {2}condición en todo el patrón word.y no solo en el espacio anterior.


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


1

Para el caso general de emparejar N veces:

$ perl -ple '$N=3;s/(\S+ ){$N}\K/\n/g' tmp
word1 word2 word3 
word4 word5 word6 
word7
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.