
ls -1
enumera mis elementos así:
foo.png
bar.png
foobar.png
...
Lo quiero en la lista sin lo .png
siguiente:
foo
bar
foobar
...
(el directorio solo contiene .png
archivos)
¿Alguien puede decirme cómo usarlo grep
en este caso?
Propósito: Tengo un archivo de texto donde se enumeran todos los nombres sin la extensión. Quiero crear un script que compare el archivo de texto con la carpeta para ver qué archivo falta.
Respuesta1
ls -1 | sed -e 's/\.png$//'
El sed
comando elimina (es decir, reemplaza con la cadena vacía) cualquier cadena .png
encontrada en elfinde un nombre de archivo.
Se .
escapa \.
para que se interprete sed
como un carácter literal .
en lugar de la expresión regular .
(lo que significa coincidir con cualquier carácter). Es $
el ancla de final de línea, por lo que no coincide .png
en medio de un nombre de archivo.
Respuesta2
Sólo necesitas el shell para este trabajo.
POSIXly:
for f in *.png; do
printf '%s\n' "${f%.png}"
done
Con zsh
:
print -rl -- *.png(:r)
Respuesta3
Si solo quieres usar bash:
for i in *; do echo "${i%.png}"; done
Debe buscar coincidencias grep
cuando intente encontrar coincidencias, no eliminar/sustituir lo que sed
sea más apropiado:
find . -maxdepth 1 -name "*.png" | sed 's/\.png$//'
Una vez que decida que necesita crear algunos subdirectorios para poner orden en sus archivos PNG, puede cambiarlos fácilmente a:
find . -name "*.png" | sed 's/\.png$//'
Respuesta4
Otra respuesta muy similar (me sorprende que esta variante particular no haya aparecido todavía) es:
ls | sed -n 's/\.png$//p'
- No necesita la
-1
opciónls
, ya quels
se supone que si la salida estándar no es una terminal (es una tubería, en este caso). - la
-n
opciónsed
significa 'no imprimir la línea de forma predeterminada' - la
/p
opción al final de la sustitución significa '...e imprimir esta línea si se realizó una sustitución'.
El efecto neto de esto es imprimir solo aquellas líneas que terminan en .png
, con el .png
eliminado. Es decir, esto también atiende a la ligera generalización de la pregunta del OP, donde el directorio no contiene solo .png
archivos.
La sed -n
técnica suele ser útil en casos en los que, de otro modo, podría utilizar grep+sed.