Estoy trabajando en un script de shell bash, que pasa por una carpeta y finalmente crea nuevos directorios basados ​​en nombres de archivos. Ahora quiero revisar cada archivo y eliminar las barras no deseadas de la ruta e ignorar la extensión del archivo antes de crear un nuevo directorio. Para probar esto, estoy haciendo eco de mi archivo de esta manera:

#!/bin/sh

cpath=`pwd`
for file in $cpath/*;do
echo $file | grep -E '(?!.*/).+(?=\.)'
done

Pero grep filtra todo y no obtengo ningún resultado. Resolví la expresión regular con RegExr http://gskinner.com/RegExr/?2vu6b
Búsqueda anticipada negativa para que coincida con la última barra y búsqueda anticipada positiva que coincida con el último punto.

3
Jonathan Frampton 6 feb. 2012 a las 23:08

1 respuesta

La mejor respuesta

No estoy seguro de si la búsqueda anticipada negativa es parte de Extended RE. Pero puedes hacer algo como esto:

#!/bin/bash

for file in $PWD/*; do
basename "${file%.*}"
done 
2
jaypal singh 7 feb. 2012 a las 00:08
1
¡Ni siquiera necesitas el echo!
 – 
Carl Norum
6 feb. 2012 a las 23:14
1
También puedo hacer for file in $PWD/*; do
 – 
SiegeX
7 feb. 2012 a las 00:00
¡¡Sí!! Esa sería la forma correcta de hacerlo. Actualizaré la respuesta.
 – 
jaypal singh
7 feb. 2012 a las 00:07
4
Lookaheads / lookbehinds no son parte de ERE. Está disponible en PCRE, por lo que grep -P se puede usar en GNU grep.
 – 
jordanm
7 feb. 2012 a las 01:23
Gracias por los comentarios adicionales. Es bueno saber que puedo usar métodos alternativos para usarlos más adelante.
 – 
Jonathan Frampton
7 feb. 2012 a las 03:14