2009-12-20 24 views
10

Mi shell tiene una llamada a 'fortuna' en mi archivo .login, para darme un pequeño mensaje del día. Sin embargo, algunas de las fortunas comienzan con una línea principal de espacios en blanco, algunas comienzan con dos y algunas no tienen ninguna línea blanca en absoluto. Esto me molesta.Eliminar espacio en blanco inicial del archivo

Me senté a la fortuna de contenedor con mi propio script de shell, que eliminaría todos los espacios en blanco iniciales de la entrada, sin destruir ningún formato de la fortuna real, que intencionalmente podría tener líneas de espacio en blanco.

No parece ser una solución fácil de una línea de dos minutos, y mientras leo (caña) a través de las páginas man para sed y grep, pensé en preguntar a nuestros maravillosos clientes aquí.

+0

se puede mostrar de forma explícita una fortuna muestra y punto qué partes le gustaría cambiar y qué partes considera que forman parte del formato que no deberían cambiar. – SiegeX

Respuesta

16

Utilizando la misma fuente que Dav:

# delete all leading blank lines at top of file 
sed '/./,$!d' 

Fuente: http://www.linuxhowtos.org/System/sedoneliner.htm?ref=news.rdf

Además, aquí es por qué esto funciona:

La coma separa una "gama" de la operación. sed puede aceptar expresiones regulares para las definiciones de rango, por lo que /./ coincide con la primera línea con "cualquier cosa" (.) y $ especifica el final del archivo. Por lo tanto,

  • /./,$ coincide con "la primera línea que no está en blanco hasta el final del archivo".
  • ! luego invierte esa selección, por lo que es efectivamente "las líneas en blanco en la parte superior del archivo".
  • d borra esas líneas.
+0

¡Perfecto! ¡¡Gracias un montón!! El enlace también será muy útil en el futuro. – Maarx

+2

Parece más claro escribir: sed -n '/./ ,$p' –

+0

Para que esto funcione con los ~ 30K archivos java que necesitaba procesar, ejecuté "find. -name '* .java' | xargs - n 1 sed -e '/./,$!d' -i .bak "- el" -n 1 "era necesario para que sed funcione correctamente – Phil

1

¿Qué tal:

sed "s/^ *//" < fortunefile 
+1

¿Por qué se votó en esta votación? Así es como leo la solicitud del OP. – SiegeX

0

no estoy seguro acerca de cómo su suerte mensaje en realidad se parece, pero aquí es una ilustración

$ string="  my message of the day" 
$ echo $string 
my message of the day 
$ echo "$string" 
     my message of the day 

o se puede usar awk

echo "${string}" | awk '{gsub(/^ +/,"")}1' 
Cuestiones relacionadas