Если Вы не должны искать назад в файле, Вы могли бы использовать именованный канал:
mkfifo my_special_file
yes | head -n 100 > my_special_file&
cat my_special_file
Конечно, можно использовать любую другую команду, включая сложный сценарий, для генерации данных в канале.
*
(звезда или звездочка), специальный символ, который (обычно) интерпретируется оболочкой, прежде чем этому дадут команду. Это (обычно) расширяется до всех имен файлов кроме тех, которые имеют продвижение точек. См. руководство удара о сопоставлении с образцом для получения дополнительной информации.
Если помещено в кавычки звезда не будет интерпретироваться оболочкой и дана команде дословно.
Примеры объяснены. Заключенный в кавычки:
grep "string" . -r --include "*.pl"
Здесь grep
получит опцию --include
с аргументом *.pl
. Это - 4 символьных строки с *
символ как первый символ. Что grep
делает с той строкой, полностью до grep
. В этом случае --include
средства только рассмотреть файлы, соответствующие шаблону *.pl
.
AFAIK негласно гну grep использует тот же lib сопоставления с образцом в качестве удара гну.
Не заключенный в кавычки:
grep "string" . -r --include *.pl
Здесь оболочка сначала развернет шаблон *.pl
ко всем именам файлов, заканчивающимся в .pl
. Предположим, что существуют файлы foo.pl
, bar.pl
и baz.pl
. После расширения командной строки похож на это:
grep "string" . -r --include foo.pl bar.pl baz.pl
Здесь grep
получит опцию --include
с аргументом foo.pl
, сопровождаемый опциями bar.pl
и baz.pl
. --include foo.pl
средства только рассмотреть файлы, соответствующие шаблону foo.pl
. С тех пор нет никаких подстановочных знаков в шаблоне единственного файла, соответствующего, который будет названным файлом foo.pl
.
Опции bar.pl
и baz.pl
средства grep будут также искать в тех файлах, но так как они не соответствуют шаблону foo.pl
они будут проигнорированы.
Различие - это, если Вы не заключаете шаблон в кавычки (*.pl
) это расширено оболочкой. Например, если Вы выполняете Ваш grep
в каталоге, который содержит названный файл foo.pl
, начиная с *pl
расширен оболочкой, что grep
на самом деле видит:
grep "string" . -r --include foo.pl
Так как Вы говорите этому только включать foo.pl
это только перероет тот один файл.
При заключении в кавычки шаблона оболочка не развернет его и grep
получает корректную команду, а именно,
grep "string" . -r --include *pl
grep -r
казался непоследовательным, но никогда не замечал, что это было только, когда я использовал a*
. – j883376 08.07.2013, 11:38