2010-02-11 4 views
8

prendere l'esempio:Come rimuovere il nome del file dalla fine dell'output du -h

$ du -h file_size.txt 
112K file_size.txt 

come faccio a rimuovere il nome del file dall'uscita di du -h

ho cercato di usare sed per la ricerca di una stringa (il nome del file) e sostituirlo con niente, ma hasnt lavorato (comando in basso)

du -h file_size.txt | sed 's/ 'file_size.txt'//' 

qualcuno potrebbe per favore ricordare il motivo per cui questo non funzionerà, o forse un modo migliore per farlo?

saluti

Paul

risposta

11

Hai qualche cattiva citando in quella linea di comando. Il più semplice è probabilmente:

du -h file_size.txt | cut -f -1 

Per fissare la riga di comando:

du -h file_size.txt | sed 's/file_size.txt//' 

Dal tuo post ha un tag awk:

du -h file_size.txt | awk '{ print $1 }' 
+2

o 'du -h file_size.txt | sed 's/\ s +. * //' ' – Tomalak

+0

@Tomalak ha l'idea giusta per usare' sed' - sure beats digitando il nome del file due volte. –

+0

Woops, le virgolette singole in cui una mia sinistra ha una VARIABILE $ lì prima. Grazie per l'aiuto come sempre – paultop6

9
du -h file_size.txt | cut -f1 
+0

SÌ! Aiutare le persone tre anni dopo! – Tastybrownies

5

uscita Semplice la prima colonna. Ecco la soluzione awk

du -h test.txt | awk '{ print $1 }' 
+0

+++ 1 :-) aus .at – Flavius

0

Questo è un po 'più prolisso, ma in ogni caso, questo è un altro modo per ciò che si vuole:

du -h file_size.txt |while read x junk; do echo $x; done 
0

@OP se i dati ha campi distinti, per esempio spazi/tabulazioni, quindi è più facile usare strumenti come awk/cut per dividerli in quei campi con delimitatori. L'uso di espressioni regolari (ad es. Sed) non è necessario. Ancora meglio è usare la shell.

vari modi

$ du -h file | awk '{print $1}' 
4.0K 

$ du -h file | cut -f1 
4.0K 

$ set -- $(du -h file) #using shell only 
$ echo $1 
4.0K 
0

tuo comando originale avrebbero funzionato se non che si è compreso uno spazio nel regexp sed, e du schede uscite.

0

l'output di du -h è [tab] delimitato.

du -h file_size.txt |sed 's/[\t].*//g' 
Problemi correlati