Tengo un archivo con un nombre como "Date.txt de hoy"
Lo que me interesa es eliminar todos los caracteres especiales que utilizan el terminal, como:
" - , ' ' [
El motivo de esto es porque los inserto en un script más tarde y es un dolor de cabeza que explica y cambia los nombres individualmente.
Los espacios "" y los guiones bajos "_" y el alfabeto "A-Z, a-z" están bien y, por lo tanto, se están reemplazando los caracteres en lugar de borrarlos.
Al principio, pensé que el comando de terminal "iconv" podría ayudarme al convertir a una codificación más simple, pero probé varias de las codificaciones y parece que podría estar equivocado.
Sé que las expresiones regulares me pueden ayudar, pero lamentablemente no estoy bien versado en ellas. Encontré esta pregunta que parece estar relacionada, pero no sé cómo implementarla o si cubre los mismos casos que el mío.
La razón por la que publiqué esto aquí es porque esta pregunta podría ser exclusiva del conjunto de caracteres que OSX admite para los nombres de archivo y la codificación que utiliza ... aunque es más probable que no tenga idea de lo que estoy hablando.
Gracias por su ayuda de antemano.
Editar: El comando
sed 's/[!@#\$%^&*()]//g'
Parece que funciona muy bien, pero no puedo hacerlo funcionar para mi caso de uso original y otros:
' ' "
Escapar de ellos tampoco funciona. Soy muy nuevo en los scripts de bash, así que ten paciencia conmigo.
Edición 2: publicar esto aquí o, de lo contrario, tendría que esperar 6 horas.
Además de la respuesta de Alan Shutko, me gustaría agregar mi propia solución que encontré.
awk '{gsub(/[[:punct:]]/,"")}1'
Estoy un poco indeciso a publicar esto ya que no puedo explicarlo bien.
Awk, como dice su página de manual, se usa para "escaneo dirigido por patrones y lenguaje de procesamiento". La función gsub busca y reemplaza todas las apariciones de la expresión regular que ingresa. La parte gsub se vería así:
gsub("a","b")
Donde en mi ejemplo, todas las apariciones de a serían reemplazadas por b. Al igual que en el comentario anterior, [[: punct:]] suena como si representara todos los signos de puntuación. Sin embargo, no sé qué significa el 1 en el exterior de los corchetes.