2011-06-14 8 views
7

Estoy tratando de encontrar la forma de obtener una lista de nombres de archivo para un archivo llamado BOZO pero que termina con SOLO 123 O 456.Listar solo ciertos archivos en un directorio que coincida con la palabra BOZO y terminar con '123' o '456'

archivos son:

BOZO12389,
BOZOand3
BOZOand456
BOZOand5
BOZOhello123

Así que el comando sólo debe pantalla 'BOZOhello123' y 'BOZOand456'

No puedo entenderlo. He intentado todas las formas de LS y GREP que puedo pensar. Lo curioso es que tratamos de hacerlo en clase durante aproximadamente 10 minutos y nadie pudo obtenerlo (incluido el instructor).

+1

No puedo creer que el instructor no sería capaz de resolver esto durante tanto tiempo. –

+0

¡Gracias chicos! No pasamos MUCHO tiempo en eso, pero por alguna razón instantáneamente pienso 'grep' y todos los demás estaban tratando de hacerlo con 'ls'. Por lo tanto, fue la primera pregunta sobre la tarea de esa noche. – Geordie

Respuesta

0

Esto no debería ser tan difícil. La forma más ingenua es ls el directorio y luego grep para lo que desee:

$ ls *BOZO* | grep -e '123$' -e '456$' 
8

El uso de globos de Shell:

ls BOZO*{123,456} 
+0

Nota, esto requiere bash, zsh u otro shell avanzado. No es portátil y no funcionará en muchos sistemas "/ bin/sh". –

10

hice lo siguiente y funcionó

ls BOZO*456 BOZO*123 
+0

Smartass. Lo Loí. – chrisdowney

2

Use expresiones regulares para ayudarlo. El comando egrep debería ayudar, porque le permitirá usar expresiones regulares.

Esta es la página de archivos del tipo BOZO456 y BOZO123

un período . es un comodín, lo que le permite sustituir a la <anything>. El * te permitirá repetirlo 0 o más veces. Al colocar alrededor de 123 y 456 corchetes redondos, simulará un quirófano.

Por lo tanto, usted quiere cualquier carácter repetido 0 o más veces, seguido de 123 o 456.

Ejemplo:

egrep "BOZO.*(456|123)" data

Gracias a Nathan Fellman por la ayuda y ediciones.

+0

Bajé la votación porque está mal con respecto al comodín. En expresiones regulares '.' es comúnmente el comodín, y' * 'significa" 0 o más veces ", por lo que coincidirá con 'BOZ456', 'BOZOOOOOOOO123', etc. ... –

+0

¡Solucionado!Gracias por el aviso y mis disculpas: $ – digerati32

+0

Eso todavía no está bien. Esto emparejará 'BOZOa456' y' BOZOx123' pero no 'BOZOOO123' o incluso' BOZO123'. Lo que necesitas es '" BOZO. * (456 | 123) " –

1

También es posible usar encuentran comando:

find . \(-name "BOZO*123" -o -name "BOZO*456" \) 
+1

Esto atraviesa niños. Quieres 'encontrar. -maxdepth 1 -name "BOZO * 123" -o -name "BOZO * 456" '(en este caso, los paréntesis no son necesarios). –

Cuestiones relacionadas