Как выполнить поиск строки, содержащей не более одного слеша? - PullRequest
6 голосов
/ 28 августа 2010

Я пытаюсь получить размер каталогов верхнего уровня в текущем каталоге (в Solaris).Так что я пишу du на grep и хочу сопоставлять только те строки, которые имеют один слеш, т.е.каталоги верхнего уровня.

Что-то вроде:

du -h | grep -e <your answer here>

, но ничего, что я пробую, не работает.Помощь оценена!

Ответы [ 4 ]

5 голосов
/ 28 августа 2010
grep -e '^[^/]*/[^/]*$'

Обратите внимание, что это соответствует строкам, которые имеют ровно одну (не более одной) косую черту, но это должно быть в порядке для вашего использования.

Возможно, вы также могли бы что-то сделать с помощью переключателя -s

.
du -hs */
3 голосов
/ 28 августа 2010

Вы также можете сопоставить вещи, которые вам не нужны, с опцией -v:

ptimac:Tools pti$ du | grep -v '/.*/'
22680   ./960-Grid-System
137192  ./apache-activemq-5.3.0
23896   ./apache-camel-2.0.0
386816  ./apache-servicemix-3.3.1
251480  ./apache-solr-1.4.0
345288  ./Community Edition-IC-96.SNAPSHOT.app

(я сейчас проверил справочную страницу Solaris; -)

Есть и другие способыв системах GNU для скина этого кота без использования regex:

find . -d1 

находит все файлы / папки на глубине 1

и команду, которую я часто использую при очистке house disk:

du -d1

или (и это должно работать на Solaris)

du | sort -n

, который показывает мне самые большие каталоги, где бы они ни находились ниже текущего каталога.

1 голос
/ 28 августа 2010

Это не дает точного ответа на ваш вопрос, но почему бы вам не попросить gdu сделать это для вас?

gdu --max-depth=1

Если вы действительно хотите пойти по пути grep, какоб этом?

du -h| grep -v '/.*/'

Это отфильтрует строки с двумя или более слешами, оставив вас с теми, которые имеют один или ноль.

0 голосов
/ 28 августа 2010
du --max-depth=1 -h
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...