2010-02-11 16 views
8

nehmen Sie das Beispiel entfernen:Wie der Dateinamen aus dem Ende der ich -h Ausgabe

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

Wie würde ich die Dateinamen aus der Ausgabe von mir -h

Ich habe zu entfernen versucht, zu verwenden, sed für eine Zeichenfolge (der Dateinamen) und ersetzen sie durch nichts zu suchen, aber es has not bearbeitetes (Befehl unten)

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

Könnte jemand bitte darauf hinweisen, warum dies nicht funktionieren, oder vielleicht ein besserer Weg, es zu tun?

Grüße

Paul

Antwort

11

Sie haben einige schlechte in dieser Befehlszeile zu zitieren. Am einfachsten ist es wahrscheinlich:

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

Befehlszeile zu beheben:

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

Da Ihr Beitrag hat einen awk tag:

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

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

+0

@Tomalak hat die richtige Idee,' sed' zu benutzen - sicher schlägt den Dateinamen zweimal. –

+0

Woops, die einfachen Anführungszeichen, in denen ein Rest von mir früher eine $ VARIABLE hat. Danke für die Hilfe wie immer – paultop6

5

Einfache Ausgabe der ersten Spalte. Hier ist die awk Lösung

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

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

0

Dieses etwas ausführlicher, aber in jedem Fall, das ist eine andere Art und Weise zu dem, was Sie wollen:

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

@OP, wenn Ihre Daten hat verschiedene Felder, für Beispiel Leerzeichen/Tabs, dann ist es einfacher zu Tools wie awk/cut zu verwenden, um sie auf diese Felder durch Trennzeichen zu teilen. Die Verwendung von Regex (zB sed) ist nicht notwendig. Noch besser ist nur die Shell.

verschiedene Weise

$ 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

Ihr ursprünglicher Befehl würde außer gearbeitet hat, dass Sie einen Platz in der sed regexp sind inklusive und gibt Registerkarten mich.

0

Die Ausgabe von du -h ist [Tab] getrennt.

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