Проблемы с “ + ” в grep

Если все остальное не удается, вы можете вручную удалить пакет через dpkg. Запуск sudo dpkg -P bsnes должен очистить bsnes.

1
задан 11 October 2016 в 07:31

2 ответа

Точки:

+ - токен ERE (Extended Regular Expression), который указывает один или несколько из предшествующих токенов, может использоваться, если используется опция -E для grep или с экранированным (\+) в случае BRE (Basic Regex), т.е. только регулярным grep Класс символов [a-z,0-9,\"] будет соответствовать любому из символов между [a-z], [0-9], , или ". Это может быть не то, что вы хотите. Обычно grep выводит целую строку, если вы хотите выводить только согласованную часть, используйте опцию -o в grep

На основании ваш пример, вы можете сделать:

grep -E '\bdata=[a-z0-9"]+\b' file
+ - это токен ERE (Extended Regular Expression), который указывает один или несколько из предшествующего токена, может использоваться, если -E опция grep используется или с экранированным (\+) в случае BRE (Basic Regex), т. е. только регулярные grep \b соответствуют строкам, нулевой ширине Класс символов [a-z,0-9,\"] будет соответствовать любому из символов между [a-z], [0-9], , или ". Возможно, это не то, что вы хотите [a-z0-9"] соответствует любому символу [a-z], [0-9] и ". + соответствует предыдущему токену один или несколько раз

Ваш текущий шаблон даже делает его правильным, без \b это будет соответствовать ложным срабатываниям, таким как foo fdata=2322ab, data=12AB и т. д.

Пример:

% grep -oE '\bdata=[a-z0-9"]+\b' <<<'<div class="node_thumbnail" data-type="file" name="GOPR0036.MP4_frame000001.jpg" data="813334c25191468c9f1c57afc99fde60" aid="133948" rel="/Files/ToolTipView?fileId=813334c25191468c9f1c57afc99fde60&pageNo=1&NoCache=101016083044" rev="topMiddle"'
data="813334c25191468c9f1c57afc99fde60
9
ответ дан 23 May 2018 в 05:20

Другим вариантом является использование egrep:

egrep 'data=[a-z,0-9,\"]+' file

egrep связывается с grep, это просто оболочка для grep:

#!/bin/sh
exec grep -E "$@"

, это полезно для интерактивного использования , Однако в сценариях я бы использовал grep -E.

-1
ответ дан 23 May 2018 в 05:20
  • 1
    Не рекомендуется использовать egrep. В течение многих лет он устарел в пользу grep -E. Как указано в спецификации POSIX, она по-прежнему поддерживается и, вероятно, будет на некоторое время, но текущий POSIX (и GNU) grep был разработан для замены старых egrep и fgrep вариантов, поэтому лучше использовать grep -E и grep -f. – terdon♦ 11 October 2016 в 14:49
  • 2
    egrep отлично подходит для интерактивного использования – Steven Penny 11 October 2016 в 15:09

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

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