У меня возникли проблемы с использованием 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».