Соответствие числовой последовательности в grep
Поэтому я пытаюсь сопоставить последовательность номеров года с помощью grep, и это должно быть легко. Я просто немного озадачен тем, что мое упрощенное регулярное выражение не работает.
Я запускаю инструмент, который архивирует некоторые файлы, но ему нужно проверить дату файла, чтобы поместить его в правильный каталог. У меня уже есть правильно отформатированный ввод, который приходит ко мне как:
<span class='t-d'>1994-Oct-28</span>
Это всего лишь один пример, когда у меня есть это, я хочу взять только часть 1994 года и использовать это для продолжения архивирования до нужного года. Я предполагал, что что-то вроде этого будет достаточно:
grep -o '[0-9]{4}'
Но это не похоже ни на что. Когда я пытаюсь что-то вроде:
grep -o '[0-9]'
это соответствует всем отдельным числам, поэтому 1 9 9 4 2 и 8.
Так что мой синтаксис неправильный, но, насколько мне известно, это соответствует числу от 0 до 9 4 раз, {} задает длину либо в диапазоне, либо в точном диапазоне. Если бы кто-то мог помочь мне с этим простым синтаксисом, он был бы очень признателен.
1 ответ
{4}
это расширенное регулярное выражение. grep
не поймет это, если вы не укажете -E
опция:
-E, --extended-regexp
Interpret PATTERN as an extended regular expression (ERE, see below). (-E is specified by POSIX.)
попробуй с
grep -E '[0-9]{4}'
пример
$ echo abcd1234abcd | grep -o -E '[0-9]{4}'
1234
Вы также можете использовать [:digit:]
класс символов, чтобы избежать проблем с локалями, где порядок символов может быть другим:
$ echo abcd1234abcd | grep -o -E '[[:digit]]{4}'
1234
если по какой-либо причине вы не хотите использовать расширенные регулярные выражения, вы можете использовать
grep -o '[0-9][0-9][0-9][0-9]'