2009-12-20 17 views
10

La mia shell ha una chiamata a "fortuna" nel mio file .login, per fornirmi un piccolo messaggio del giorno. Tuttavia, alcune delle fortune iniziano con una linea di spaziatura leader, alcune iniziano con due, e alcune non hanno alcuna linea di spaziatura principale. Questo mi fa impazzire.Rimuovi spazi bianchi iniziali dal file

Mi sono seduto al wrapper fortuna con il mio script di shell, che rimuoveva tutti gli spazi bianchi iniziali dall'input, senza distruggere alcuna formattazione della reale fortuna, che potrebbe avere intenzionalmente linee di spazio bianco.

Non sembra essere una soluzione facile da due minuti e, mentre leggevo (canna) attraverso le pagine man per sed e grep, ho pensato di chiedere ai nostri meravigliosi clienti qui.

+0

si potrebbe mostrare in modo esplicito una fortuna campione e il punto quali parti si desidera modificare e quali parti si considerano parte della formattazione che non dovrebbero cambiare. – SiegeX

risposta

16

Utilizzando la stessa fonte Dav:

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

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

Inoltre, ecco il motivo per cui questo funziona:

La virgola separa un "range" di funzionamento. sed può accettare espressioni regolari per le definizioni di intervallo, quindi /./ corrisponde alla prima riga con "nulla" (.) su di esso e $ specifica la fine del file. Pertanto,

  • /./,$ corrisponde a "la prima riga non vuota alla fine del file".
  • ! quindi inverte quella selezione, rendendola effettivamente "le righe vuote nella parte superiore del file".
  • d elimina quelle righe.
+0

Perfetto !! Grazie mille!! Il collegamento si rivelerà molto utile anche in futuro. – Maarx

+2

Sembra più chiaro scrivere: sed -n '/./,$p' –

+0

Per far funzionare tutto questo con i ~ 30K file java che dovevo elaborare, ho eseguito "find. -name '* .java' | xargs - n 1 sed -e '/./,$!d' -i .bak "- il" -n 1 "era necessario affinché sed funzionasse correttamente – Phil

1

ne dite:

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

Perché questo è stato votato? Ecco come ho letto la richiesta dell'OP. – SiegeX

0

non sono sicuro di come il messaggio fortuna si presenta come, ma ecco un esempio

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

o si potrebbe usare awk

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