Я пытаюсь рассчитать /
в определенном пути, но grep
количества все экземпляры как 1, когда это находится в 1 строке.
/home/usr/bin/test | grep / -c
дает ответ 1
.
Ваша команда на самом деле считала бы количество строк, содержащих /
в стандартном выводе команды /home/usr/bin/test
Вот некоторые опции считать экземпляры /
в строке /home/usr/bin/test
:
grep -o '/' <<< "/home/usr/bin/test" | wc -l
tr -dc '/' <<< "/home/usr/bin/test" | wc -c
Как grep -c
количество количеств строк, которые содержат шаблон. Используя -o
выводы опции подобранное содержание на различных строках. Можно затем использовать -c
считать те строки.
grep -o '/' <<< "/home/usr/bin/test" | grep '/' -c
Используя awk
(Распечатайте каждую строку отдельно):
awk -F"/" '{print NF-1}' my.txt
-F"/"
: рассмотреть /
как разделители полейNF-1
: количество полей 1.Распечатайте все строки:
tr -d '\n' < my.txt | awk -F"/" '{print NF-1}'
Используя sed
и grep
:
sed "s@/@/\n@g" my.txt | grep -c /
sed "s@/@/\n@g"
помещает новую строку после каждого /
так grep
может считать всех их.Вы делаете его неправильно потому что:
-c
отметьте количество количеств согласующих отрезков длинной линии "/home/usr/bin/test | grep / -c
буквально средства, которые Вы пытаетесь выполнить /home/usr/bin/test
файл и канал его вывод к grep
То, что необходимо делать, является этим:
считайте отдельный вывод grep
с
grep -o '/' <<< "/home/usr/bin/test" | wc -l
используйте инструменты кроме grep
:
# saving matches to array and printing array in scalar context
$ perl -ne '@arr = $_ =~ /\//g;print 0+@arr' <<< "/home/usr/bin/test"
4
# building list of only / chars and getting length of that list
$ python -c 'import sys; print(len([char for line in sys.stdin for char in line if char == "/"]))' <<< "/home/usr/bin/test"
4
# iterating over each character of string using substr
$ awk '{for(i=1;i<=length($0);i++) if(substr($0,i,1)=="/") count++}END{print count}' <<< "/home/usr/bin/test"
4