( Рекомендуется ) Использовать синтаксис регулярного выражения, поддерживаемый grep (1). Современный grep (1) поддерживает две формы синтаксиса регулярных выражений POSIX 1003.2: базовые (устаревшие) RE и современные RE. Синтаксис подробно описан на man-страницах re_format (7) и regex (7), которые являются частью систем BSD и Linux соответственно. GNU grep (1) также поддерживает Perl-совместимые RE, предоставляемые библиотекой pcre (3).
На языке регулярных выражений символ табуляции обычно кодируется \t
атомом. Атом поддерживается расширенными регулярными выражениями BSD (egrep
, grep -E
в BSD-совместимой системе), а также совместимыми с Perl RE (pcregrep
, GNU grep -P
).
Как базовые регулярные выражения, так и расширенные RE Linux, по-видимому, не поддерживают \t
. Обратитесь к справочной странице утилиты UNIX, чтобы узнать, какой язык регулярных выражений он поддерживает (отсюда разница между регулярными выражениями sed (1), awk (1) и pcregrep (1)).
Следовательно, в Linux:
$ grep -P '\t' FILE ...
В системе, аналогичной BSD:
$ egrep '\t' FILE ...
$ grep -E '\t' FILE ...
Передать символ табуляции в шаблон. Это просто при редактировании файла скрипта:
# no tabs for Python please!
grep -q ' ' *.py && exit 1
Однако при работе в интерактивной оболочке вам, возможно, придется полагаться на возможности оболочки и терминала для ввода правильного символа в строку. На большинстве терминалов это можно сделать с помощью комбинации клавиш Ctrl
+ V
, которая инструктирует терминал обрабатывать буквально следующий вводимый символ (V
для "дословно"):
$ grep '<Ctrl>+<V><TAB>' FILE ...
Некоторые оболочки могут предлагать расширенную поддержку для набора команд. Так, в bash (1) слова вида $'string'
обрабатываются специально:
bash$ grep $'\t' FILE ...
Пожалуйста, обратите внимание, что, будучи хорошим в командной строке, это может вызвать проблемы совместимости, когда скрипт будет перемещен на другую платформу. Кроме того, будьте осторожны с кавычками, когда используете специальные предложения, пожалуйста, обратитесь к bash (1) для деталей.
Для оболочки Bourne (и не только) такое же поведение можно эмулировать, используя подстановку команд, дополненную printf (1), для создания правильного регулярного выражения:
$ grep "`printf '\t'`" FILE ...