Как grep для вкладок без использования литеральных вкладок и почему \ t не работает?

Когда я ищу вкладки в файле с (e) grep, я использую вкладку litteral (^v + <tab>). Я не могу использовать \t в качестве замены вкладок в регулярных выражениях. С помощью, например, Это выражение работает очень хорошо.

Итак, есть ли возможность использовать нелитровую замену для <tab> и каковы фоны для неработающего / не интерпретированного \t?

1
задан 13 May 2016 в 21:24

3 ответа

Это не совсем тот ответ, который вы хотели бы услышать, но возможное использование escape-последовательностей обеспечивается bash

command | grep $'\t'

(не помещайте его в двойные кавычки!). [!d1 ]

12
ответ дан 25 May 2018 в 19:50
  • 1
    Благодарим вас за публикацию вашего предложения. Даже он не использует собственные механизмы grep, это умное решение. – Lasall 14 July 2011 в 20:13
  • 2
    нет необходимости в -E (для поиска не существует регулярного выражения). Также нет необходимости подключаться к команде. Тем не менее, спасибо, что указали на эту довольно упущенную функцию bash (строки с одним кавычком, которым предшествует $) – Walter Tross 21 February 2013 в 16:29
  • 3
    Действительно, я предлагаю, чтобы @enzotib отредактировал ответ просто grep $'\t'. – Teemu Leisti 4 June 2013 в 17:01
  • 4
    Следует подчеркнуть, что это особенность bash и будет (беззвучно!) Делать неправильную вещь, если выполняется какой-либо другой оболочкой (например, тире, которая по умолчанию используется для сценариев оболочки на Ubuntu и других) – xjcl 26 August 2017 в 17:00

awk '/\t/' - мое любимое решение:

printf 'a\t\nb' | awk '/\t/'

Выход: a\t.

2
ответ дан 25 May 2018 в 19:50

Всегда можно прибегнуть к использованию шестнадцатеричного кода ascii для вкладки:

$ echo "one"$'\t'"two" > input.txt                                 

$ grep -P "\x9" input.txt                                          
one two

$ grep $'\x9' input.txt                                            
one two
1
ответ дан 25 May 2018 в 19:50

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

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