Как grep для групп из n цифр, но не более n?

11.10 действительно старый. Дайте 12.04 попробовать хотя бы (если вы хотите LTS ... что вы, вероятно, делаете.) Он должен видеть все ядра. Если это не так, сообщите об этом как об ошибке.

Как сообщить об ошибке?

1
задан 19 October 2014 в 09:05

2 ответа

Это покажет вам 4 числа в строке, но не более

grep '[0-9][0-9][0-9][0-9][^0-9]' file

Обратите внимание: ^ означает не

. Проблема связана с этим, хотя я не уверен, как чтобы исправить ... если число - это конец строки, тогда оно не появится.

Однако эта уродливая версия будет работать для этого случая

grep '[0-9][0-9][0-9][0-9]' file | grep -v [0-9][0-9][0-9][0-9][0-9]
6
ответ дан 24 May 2018 в 02:45
  • 1
    oops, did not нужно быть egrep - я отредактировал его – matt 19 October 2014 в 03:23
  • 2
    Первый неправильный - он находит a12345b, потому что он соответствует 2345b. – Volker Siegel 19 October 2014 в 06:28

Если grep не поддерживает регулярные выражения perl (-P), используйте следующую команду оболочки:

grep -w "$(printf '[0-9]%.0s' {1..4})" file

, где printf '[0-9]%.0s' {1..4} будет производить 4 раза [0-9]. Этот метод полезен, когда у вас есть длинные цифры, и вы не хотите повторять шаблон (просто замените 4 на число ваших цифр, которое нужно искать).

Используя -w будет искать все слова. Однако, если вас интересуют буквенно-цифровые строки, например 1234a, затем добавьте [^0-9] в конце шаблона, например.

grep "$(printf '[0-9]%.0s' {1..4})[^0-9]" file

Использование $() в основном является подстановкой команд. Проверьте это сообщение, чтобы увидеть, как printf повторяет шаблон.

0
ответ дан 24 May 2018 в 02:45

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

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