Как удалить имя файла из конца вывода du -h - PullRequest
9 голосов
/ 11 февраля 2010

возьмите пример:

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

Как бы удалить имя файла из вывода du -h

Я пытался использовать sed для поиска строки (имени файла) и заменить ее ничем, но это не сработало (команда ниже)

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

Может ли кто-нибудь указать, почему это не сработает, или, возможно, лучший способ сделать это?

Привет

Пол

Ответы [ 7 ]

13 голосов
/ 11 февраля 2010

У вас плохая цитата в этой командной строке. Самое простое, вероятно:

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

Чтобы исправить вашу командную строку:

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

Поскольку ваше сообщение имеет тег awk:

du -h file_size.txt | awk '{ print $1 }'
9 голосов
/ 11 февраля 2010
du -h file_size.txt | cut -f1
5 голосов
/ 11 февраля 2010

Простой вывод первого столбца. Вот решение awk

du -h test.txt  | awk '{ print $1 }'
0 голосов
/ 16 марта 2010

вывод du -h ограничен [табуляцией].

du -h file_size.txt |sed 's/[\t].*//g'
0 голосов
/ 12 февраля 2010

Ваша оригинальная команда сработала бы, если бы вы не включили пробел в sed regexp и вкладки du output.

0 голосов
/ 12 февраля 2010

@ OP, если ваши данные имеют разные поля, например, пробелы / табуляции, тогда проще использовать такие инструменты, как awk / cut, чтобы разделить их в этих полях разделителями. Использование регулярных выражений (например, sed) не является необходимым. Еще лучше использовать оболочку.

различными способами

$ 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 голосов
/ 11 февраля 2010

Это немного более многословно, но в любом случае, это еще один путь к тому, что вы хотите:

du -h file_size.txt |while read x junk; do echo $x; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...