2009-05-13 12 views
11

Si quiero cortar una lista de texto usando una cadena como delimitador, ¿es posible? Por ejemplo tengo un directorio en una lista de secuencias de comandos shell llamar mismo script Perl dicen¿Es posible utilizar una cadena como delimitador en el comando de corte de Unix?

abc.pl 

Así que cuando lo haga

$grep abc.pl * 

en ese directorio, me da los resultados siguientes

xyz.sh: abc.pl 1 2 
xyz2.sh: abc.pl 2 
mno.sh: abc.pl 3 
pqr.sh: abc.pl 4 5 

Básicamente quiero toda la salida después de "abc.pl" (para verificar qué argumentos de rango se están pasando al perl en este momento)

Cuando traté

$grep abc.pl * | cut -d'abc.pl' -f2 

O

$grep abc.pl * | cut -d'abc\.pl' -f2 

me facilita

cut: invalid delimiter 

Cuando leí el hombre de corte se establece

delim puede ser un multi- personaje de bytes

¿Qué estoy haciendo/interpretando mal aquí?

+0

pena por el formato Lemme correctas pocas líneas anteriores para que tengan sentido ... me da los resultados siguientes xyz.sh: abc.pl 1 2 xyz2.sh: abc.pl 2 mno.sh: abc.pl 3 pqr.sh: abc.pl 4 5 ... Cuando traté $ grep abc.pl * | corte -d'abc.pl '-f2 O $ grep abc.pl * | cortar -d'abc.pl' f2 su dando a cortar: delimitador no válido ... Esperamos que la nuevas líneas de trabajo de este tiempo :) –

+0

nop :(no sé por qué no muestran sus nuevas líneas que entraron :( –

+0

¿Quiere decir que las páginas man con ejemplos de uso de CERO no dejaron en claro? – Chance

Respuesta

6

Cuando leo hombre para corte, indica ... delim puede ser un carácter de varios bytes.

Multi-byte, pero solo un carácter, no una cadena.

canti:~$ ll | cut --delimiter="delim" -f 1,2 
cut: the delimiter must be a single character 
Try `cut --help' for more information. 

canti:~$ cut --version 
cut (GNU coreutils) 5.97 

Puede especificar único delimitador de salida como una cadena (inútil en este caso):

--output-delimiter=STRING               
     use STRING as the output delimiter the default is to use the input delimiter 
+0

Gracias Alex .... –

5

¿por qué no utilizar grep abc.pl | awk '{print $3, $4}'?

+0

realmente no funciona de la manera en que espero que muestre resultados. Muestra una lista parcial ... también tengo curiosidad por saber qué sucede con la forma en que estoy usando corte? –

+0

Nunca he usado corte. Tu tarea grita por awk o perl! – alamar

+0

Genial ... Gracias alamar ... sin embargo, voy a dar la respuesta correcta a la respuesta de Alex, ya que realmente respondió lo que estaba buscando para. Ojalá hubiera una manera de seleccionar dos respuestas ... pero entonces causaría muchos otros problemas. Gracias por tu ayuda. Realmente lo agradezco :) –

0

$ grep abc.pl * | cut -d '' -f3-999

En ese caso, simplemente utilice el carácter de espacio como el delimitador.

+1

No es necesario incluir '999' - simplemente haz' cut -d '' - f3-'. – jnylen

0

O puede tratar por ejemplo Ruby:

grep abc.pl * | ruby -ne 'p $_.chomp.split("abc.pl").last' 
3

Trate de usar esto.

$grep abc.pl * | awk -F 'abc.pl' '{print $2}' 

-F fs --field-separador fs Use fs para el separador de campo de entrada (el valor de la variable predefinida FS).

Cuestiones relacionadas