Экземпляры шаблона количества с помощью grep

Я пытаюсь рассчитать / в определенном пути, но grep количества все экземпляры как 1, когда это находится в 1 строке.

/home/usr/bin/test | grep / -c 

дает ответ 1.

4
задан 13 May 2017 в 10:41

4 ответа

Ваша команда на самом деле считала бы количество строк, содержащих / в стандартном выводе команды /home/usr/bin/test

Вот некоторые опции считать экземпляры / в строке /home/usr/bin/test:

grep -o '/' <<< "/home/usr/bin/test" | wc -l

tr -dc '/' <<< "/home/usr/bin/test" | wc -c
5
ответ дан 23 November 2019 в 11:39

Как grep -c количество количеств строк, которые содержат шаблон. Используя -o выводы опции подобранное содержание на различных строках. Можно затем использовать -c считать те строки.

grep -o '/' <<< "/home/usr/bin/test" |  grep '/' -c
4
ответ дан 23 November 2019 в 11:39

Используя 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 может считать всех их.
3
ответ дан 23 November 2019 в 11:39

Вы делаете его неправильно потому что:

  • -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
    
2
ответ дан 23 November 2019 в 11:39

Другие вопросы по тегам:

Похожие вопросы: