Некоторые команды принимают файл в качестве входных данных, есть ли способ обработать результат команды как файл?

например, я хочу получить строку между 2 строками:

sed -n "/START-WORD-HERE/,/END-WORD-HERE/p" input

но я хочу использовать команду, которая генерирует много текста в качестве ввода, например 'cat somefile'. Я пытался заменить ввод на $(cat somefile), но sed возвращал ошибку для каждого слова, возвращаемого командой cat ...

1 ответ1

0

Да, и это является ядром философии Linux "Много маленьких инструментов для создания более крупного процесса"

Linux использует так называемые каналы командной строки.

Чтобы использовать их, вы просто объединяете две команды, используя символ вертикальной черты

|

Итак, в вашем случае вы сказали, что хотите отправить вывод команды cat в команду sed, вы можете сделать это следующим образом

cat somefile | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

Обратите внимание, что в этом случае вы больше НЕ указываете имя файла после команды.

99% всех команд Linux позволят вам работать с использованием каналов, но обязательно прочитайте справочные страницы для некоторых из них, так как многие из них требуют, чтобы вы по-прежнему указывали имя файла для работы, но обычно сообщают вам использовать

-

(Минус символ)

Вместо имени файла.

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

Это означает, например, если вы

cat somefile | grep someword | sed -n "/START-WORD-HERE/,/END-WORD-HERE/p"

Входными данными для sed будут только выходные данные любых операций, выполненных grep на входе cat.

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

получить

cat blah | grep bleah

Немного прав, прежде чем добавить немного sed. Затем установите бит sed перед добавлением бита awk/wc/ what else, просматривая вывод шаг за шагом, и вы сможете отлаживать и проверять свой канал по ходу работы.

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

и затем, как только вам это надоест, вот ссылка на статью, которую я написал для PHP Builder давным-давно, показывающую вам, как писать свои собственные конвейеры на PHP.

http://www.phpbuilder.com/columns/peter_shaw20090211.php3

Прежде всего, получайте удовольствие, вы можете делать удивительные вещи с помощью небольшого количества инструментов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .