пытаясь найти количество каталогов в пути с помощью регулярного выражения - PullRequest
0 голосов
/ 17 марта 2020

Мне нужно узнать, сколько каталогов находится в заданном пути. Например, testdir1/testdir2/testdir3/ должен возвращать три каталога с учетом последнего /, в котором после него нет текста. Это все в среде bash.

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

tr '/.' '\n' <<< testdir1/testdir2/testdir3/ | wc -l

Как бы я написал задачу найти все / кроме одного в конце без текста после него ?

Ваша помощь будет принята с благодарностью.

Ответы [ 3 ]

0 голосов
/ 17 марта 2020

Использование AWK

:=>echo "testdir1/testdir2/testdir3/"  | awk -F'/' '{ if ($NF =="") print NF-1; else NF }' 
3
:=>

Объяснение:


awk -F'/'  -- Set field seprator as / 

{ if ($NF =="") -- NF is number of field in current record. $NF -- value is last field 
print NF-1; --  IF last field is empty print NF-1 else all fields 

Редактировать: Использование grep

:=>echo "testdir1/testdir2/testdir3/"  | grep -o '/' |  wc -l 
3
0 голосов
/ 17 марта 2020

Не могли бы вы попробовать следующее:

tr -cd "/" <<< "testdir1/testdir2/testdir3/" | wc -c

tr -cd "/" удаляет все символы ввода, кроме "/", и вывод будет ///. Затем wc -c считает количество байтов.

0 голосов
/ 17 марта 2020

Вы можете заменить herestring <<< на ProcessSubstituion <( ), потому что здесь добавлена ​​дополнительная новая строка

tr '/' '\n' < <(printf '%s' testdir1/testdir2/testdir3/) | wc -l

Выход

3

Или просто удалите завершающий sla sh /

tr '/' '\n' <<< testdir1/testdir2/testdir3 | wc -l

Выход

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