grep вкладка в UNIX - PullRequest
       116

grep вкладка в UNIX

379 голосов
/ 01 декабря 2009

Как мне grep вкладка (\ t) в файлах на платформе Unix?

Ответы [ 22 ]

2 голосов
/ 01 декабря 2009

используйте gawk, установите разделитель полей на tab (\ t) и проверьте количество полей. Если больше 1, то есть / есть вкладки

awk -F"\t" 'NF>1' file
2 голосов
/ 16 июля 2013

Хороший выбор - использовать sed как grep (как объясняется в этом классическом sed ).

sed -n 's/pattern/&/p' file

Примеры (работает в bash, sh, ksh, csh, ..):

[~]$ cat testfile
12 3
1 4 abc
xa      c
        a       c\2
1 23

[~]$ sed -n 's/\t/&/p' testfile 
xa      c
        a       c\2

[~]$ sed -n 's/\ta\t/&/p' testfile
        a       c\2
1 голос
/ 24 июля 2015

+ 1 способ, который работает в ksh, dash и т.д.

grep "$(printf 'BEGIN\tEND')" testfile.txt
0 голосов
/ 03 июня 2015

Много раз ищите пробелы [[: space:]] *

grep [[: space:]] * '.' '.'

Найдет что-то вроде этого:

«Вкладка» ..

Это одинарные кавычки ('), а не двойные (").
Это способ объединения в grep. = -)

0 голосов
/ 04 июля 2017

Обозначение $ '\ t', приведенное в других ответах, зависит от оболочки - похоже, оно работает в bash и zsh, но не универсально.

ПРИМЕЧАНИЕ. Следующее относится к оболочке fish и не работает в bash :

В оболочке fish можно использовать \t без кавычек, например:

grep \t foo.txt

Или можно использовать шестнадцатеричные или юникодные обозначения, например ::

grep \X09 foo.txt
grep \U0009 foo.txt

(эти обозначения полезны для более эзотерических символов)

Поскольку эти значения необходимо заключать в кавычки, можно объединять значения в кавычках и без кавычек путем конкатенации:

grep "foo"\t"bar"
0 голосов
/ 23 апреля 2016

Эти альтернативные методы двоичной идентификации полностью функциональны. И мне очень нравится тот, кто использует awk, так как я не мог вспомнить использование синтаксиса с одиночными двоичными символами. Однако также должно быть возможно присвоить переменной оболочки значение в переносимом режиме POSIX (то есть TAB = echo "@" | tr "\100" "\011"), а затем использовать его отовсюду, в переносимом режиме POSIX; а также (т.е. имя файла grep "$ TAB"). Хотя это решение хорошо работает с TAB, оно также будет хорошо работать и с другими двоичными символами, когда в присваивании используется другое желаемое двоичное значение (вместо значения для символа TAB для 'tr').

0 голосов
/ 23 февраля 2016

Возможно, вы захотите использовать grep "$(echo -e '\t')"

Требуется только echo, чтобы иметь возможность интерпретации обратной косой черты.

0 голосов
/ 08 сентября 2015

Использование метода «sed-as-grep», но замена вкладок видимым символом личных предпочтений - мой любимый метод, поскольку он четко показывает, какие файлы содержат запрашиваемую информацию, а также где она размещена в строках :

sed -n 's/\t/\*\*\*\*/g' file_name

Если вы хотите использовать информацию о строке / файле или другие параметры grep, но также хотите увидеть видимую замену символа табуляции, вы можете добиться этого с помощью

grep -[options] -P '\t' file_name | sed 's/\t/\*\*\*\*/g'

Как пример:

$ echo "A\tB\nfoo\tbar" > test
$ grep -inH -P '\t' test | sed 's/\t/\*\*\*\*/g'
test:1:A****B
test:2:foo****bar

РЕДАКТИРОВАТЬ: Очевидно, что вышеупомянутое полезно только для просмотра содержимого файла, чтобы найти вкладки - если цель состоит в том, чтобы обрабатывать вкладки как часть большего сеанса сценариев, это не служит никакой полезной цели.

0 голосов
/ 23 июля 2015

Это хорошо работает для AIX. Я ищу строки, содержащие JOINED<\t>ACTIVE

voradmin cluster status | grep  JOINED$'\t'ACTIVE

 vorudb201   1       MEMBER(g) JOINED        ACTIVE
*vorucaf01   2       SECONDARY JOINED        ACTIVE
0 голосов
/ 04 апреля 2013

Ответ проще. Напишите ваш grep и в кавычках наберите клавишу tab, она хорошо работает как минимум в ksh

grep "  " *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...