Когда я ищу вкладки в файле с (e) grep, я использую прибрежную вкладку (^v + <tab>
). Я не могу использовать \t
как замена для вкладок в регулярных выражениях. С, например, sed это выражение работает очень хорошо.
Так есть ли любая возможность использовать non-litteral замену для <tab>
и каковы фоны для не работы / не интерпретируемый \t
?
grep использует регулярные выражения, как определено POSIX. По любым причинам POSIX не определили \t
как вкладка.
У Вас есть несколько альтернатив:
скажите grep использовать регулярные выражения, как определено жемчугом (жемчуг имеет \t
как вкладка):
grep -P "\t" foo.txt
страница справочника предупреждает, что это - "экспериментальная" функция. по крайней мере, \t
кажется, хорошо работает. но более усовершенствованный жемчуг regex функции не может.
используйте printf для печати символа табуляции для Вас:
grep "$(printf '\t')" foo.txt
используйте литеральный символ табуляции:
grep "^V<tab>" foo.txt
это: ввести grep "
, затем нажмите ctrl+v
, затем нажмите tab
, затем введите " foo.txt
. нажатие ctrl+v
в терминале заставляет следующий ключ быть взятым дословно. это означает, что терминал вставит символ табуляции вместо того, чтобы инициировать некоторую функцию, связанную с клавишей Tab.
используйте ansi c заключение в кавычки функции удара:
grep $'\t' foo.txt
это не работает во всех оболочках.
используйте awk:
awk '/\t/'
используйте sed:
sed -n '/\t/p'
См. статью Википедии о регулярных выражениях для обзора определенных классов символов в POSIX и других системах.
Это не точно ответ, который Вы хотели бы услышать, но возможное применение escape-последовательностей обеспечивается ударом
command | grep $'\t'
(не помещайте его в двойные кавычки!).
awk '/\t/'
мое любимое обходное решение:
printf 'a\t\nb' | awk '/\t/'
Вывод: a\t
.
Можно всегда обращаться к использованию шестнадцатеричного кода ASCII для вкладки:
$ echo "one"$'\t'"two" > input.txt
$ grep -P "\x9" input.txt
one two
$ grep $'\x9' input.txt
one two