2010-12-01 18 views
8

Tengo un archivo que contiene varias líneas como éstas:Buscando expresión regular correcta para csplit

1291126929200 started 88 videolist15.txt 4 Good 4 
1291126929250 59.875 29.0 29.580243595150186 43.016096916037604 
1291126929296 59.921 29.0 29.52749417740926 42.78632483544682 
1291126929359 59.984 29.0 29.479540161281143 42.56031951027556 
1291126929437 60.046 50.0 31.345036510255586 42.682281485516945 
1291126932859 started 88 videolist15.txt 5 Good 4 

Quiero dividir los archivos para cada línea que contiene started (o videolist, no importa).

El siguiente comando sólo produce archivos de salida 2:

$ csplit -k input.txt /started/ 

Sin embargo, me esperaba mucho más, como puede verse en:

$ grep -i started input.txt |wc -l 
$ 146 

¿Cuál sería el comando correcto csplit?

Gracias

Respuesta

10

Sólo tiene que añadir al final {*}:

$ csplit -k input.txt /started/ {*} 

La página del manual dice:

{*} repeat the previous pattern as many times as possible. 

Demostración:

$ cat file 
1 
foo 
2 
foo 
3 
foo 
$ csplit -k file /foo/ {*} 
2 
6 
6 
4 
$ ls -tr xx*    
xx03 xx02 xx01 xx00 
$ csplit --version 
csplit (GNU coreutils) 7.4 
+2

Desafortunadamente, eso me da: 'csplit: *}: mal recuento de repetición'. Sin embargo, funcionó con un número arbitrario. gracias por la pista. – slhck

+0

@slhck: Funciona bien para mí. He agregado una ejecución de demostración. Veré si esto es problema de versión. – codaddict

+1

Ya veo. Tengo la versión BSD incluida con OS X que ni siquiera tiene un modificador '--version'. – slhck

0

De acuerdo con el Abierto Gro especificaciones arriba el comando csplit acepta basic regular expressions.

REGEXPs básicos son un subconjunto limitado de implementaciones completas de expresiones regulares. Admiten caracteres literales, asterisco (*), punto (.), Clases de caracteres ([0-9]) y anclas (^, $). Ellos no admiten soporte uno o más (+) o alternancia (a | b).

+0

Esto no tiene relevancia para la pregunta real que hice, que fue respondida hace años. – slhck

+1

@slhck ¿Podría esta información ayudar a alguien más que se encontró con esta pregunta al tratar de usar csplit en su propia situación? – cbare

+0

Esta es * muy * información general, aunque sería, por supuesto, bueno tener * además * una respuesta real a la pregunta. Tal como está, esto sería más adecuado como un comentario. – slhck

Cuestiones relacionadas