grep match dif guish между 1 и -1 - PullRequest
       28

grep match dif guish между 1 и -1

1 голос
/ 04 апреля 2020

Допустим, у меня есть следующее:

>>tmp='1 1 1 1 1 -1 -1 -1 -1 -1'
>>echo $tmp
1 1 1 1 1 -1 -1 -1 -1 -1

И я использую команды:

>>echo $tmp | grep -ow 1 | wc -l
10
>>echo $tmp | grep -ow "\-1" | wc -l
5

Как я могу получить просто подсчет 1 (какой ответ должен быть 5 в приведенном выше примере) без учета отрицательных 1?

1 Ответ

2 голосов
/ 04 апреля 2020

Вы можете использовать

echo "$temp" | grep -oE '(^|[^-0-9])1\b' | wc -l

Или, если числа разделены пробелами, использовать границы пробелов вы можете использовать регулярное выражение PCRE с GNU grep или Perl эквивалент:

echo "$temp" | grep -oP '(?<!\S)1(?!\S)' | wc -l
perl -lne 'END {print $c} map ++$c, /(?<!\S)1(?!\S)/g'

См. онлайн-демо # 1 и онлайн-демо # 2 .

Подробности

  • -o - только выходные данные соответствуют
  • -E - включить синтаксис POSIX ERE
  • -P - включить синтаксис PCRE
  • (^|[^-0-9]) - соответствует началу строки (^) или (|) символа, отличного от - и di git
  • (?<!\S) - левой пробельной границы
  • 1 - a 1 di git
  • \b - граница слова
  • (?!\S) - правая граница пробела
...