grep зависает

grep зависает

У меня возникли проблемы с использованием grep, у меня установлена ​​Ubuntu 18.04 на Win 10. Она зависает при выполнении самых простых команд, я могу отменить ее, и она создаст новый файл, если я захочу, но ничего в него не записывает.

$ mkdir test
$ cd test
$ ls
$ sudo grep "Werk!" > new
^C
$ ls
new
$ cat new

Я упускаю что-то очевидное?

решение1

Да. Вы используете grep для STDIN, поэтому он зависает навсегда в ожидании ввода, который так и не приходит.

Вероятно, вы имели в виду включить «.» в качестве аргумента grep и -r (рекурсивный) для grep текущего каталога.

grep -r hello .

Другие люди также считают поведение по умолчанию grepне идеальным, поэтому вы найдете некоторые grepальтернативы, не имеющие этой проблемы. Например,Серебряный Искательидет по имени agи по умолчанию выполняет рекурсивный поиск в текущем каталоге, поэтому ваше предположение о правильном синтаксисе было бы верным для ag:

ag hello

agтакже по умолчанию используется поиск без учета регистра, если только вы не включили заглавную букву, что также, возможно, то, что вам нужно. Он также по умолчанию использует цвет и использует более мощный движок регулярных выражений PCRE (вроде Perl) вместо более слабого, старого соответствия в стиле glob, которое grepиспользуется по умолчанию.

Проблемы с удобством использования, grepподобные этим, являются причиной того, что вам следует использовать более новую альтернативу, когда это возможно, и только grepтогда, когда это необходимо. grepТем не менее, полезно знать стандартный инструмент для сценариев оболочки, которым вы можете поделиться, и который является стандартной утилитой на любой машине Linux, в которую вы войдете.

«ripgrep» и «ack» — другие хорошие альтернативы grep.

решение2

Вы пропустили второй аргумент grepкоманды, указывающий файл, в котором вы ищете шаблон.

Пожалуйста, следуйтечеловек 1 grepчтобы получить помощь по поводу grep.

решение3

Возможно, вы хотите записать тексты в файл «new», это можно сделать с помощью «echo texts > new».

Связанный контент