Intereting Posts
BOOTCHART: не создавать загрузочную страницу после перезагрузки Не удалось настроить устройство loop во время установки файла .iso 3d ускорение под kvm Что означает rc, в bashrc, nanorc? Мне нужен файл сценария для проверки (ping) 3 ip address работают или нет Ubuntu на платформе платформы ARM ошибка автоматической установки: "/etc/cron.daily/apt: Ошибка обновления базы данных, заблокирована база данных" Могу ли я заставить окно открываться поверх других окон при открытии с помощью сочетания клавиш? Ubuntu @myLaptop будет загружаться только при выборе режима отказоустойчивой графики (несколько ошибок) Невозможно добавить онлайн-аккаунт, кроме Google Как увеличить формат PDF с центрированием? Не удается установить Ubuntu на ноутбук HP DV6 Назначение ярлыков (ускорителей) для Nautilus 3 Где именно программы и файлы, сохраненные в непостоянной живой системе? Процессор hogging CPU

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

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

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

grep использует регулярные выражения, определенные POSIX . По каким-либо причинам POSIX не определил \t как вкладку.

У вас есть несколько альтернатив:

  • tell grep использовать регулярные выражения, определенные perl (perl имеет \t как вкладку):

     grep -P "\t" foo.txt 
  • используйте printf для печати символа табуляции для вас:

     grep "$(printf '\t')" foo.txt 
  • или, как вы уже упоминали, используйте символ буквальной вкладки:

     grep "^V<tab>" foo.txt 

    то есть: type grep " , затем нажмите ctrl+v , затем нажмите tab , затем введите " foo.txt . нажатие ctrl+v в оболочке приводит к тому, что следующий ключ будет восприниматься буквально. это означает, что оболочка будет вставлять символ табуляции вместо запуска некоторой функции, связанной с ключом вкладки.

  • если вы используете bash, вы можете использовать функцию цитирования ansi c :

     grep $'\t' foo.txt 

См. Статью wikipedia о регулярных выражениях для обзора определенных классов символов в POSIX и других системах.

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

 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 

regex определяет, что [[: пробел:]] выполняет поиск как пробелов, так и вкладок. Вы также можете попробовать:

 egrep "[:blank:]{2,5} 

это найдет большинство вкладок (так как в основном вкладка занимает 2-5 пробелов.

использование \ t в sed, вероятно, является улучшением sed.