Я широко использовать несколько команд Linux оболочки трубопроводов, например:Общее решение для обхода заголовков файлов в оболочке команды
grep BLAH file1 | sed 's/old/new/' | sort -k 1,1 > file3
Мои файлы часто имеют строку заголовка, и часто я должен сохранить его на протяжении всего трубопровод. Так, например, я хотел бы grep, sed и sort из строки 2 и дальше, сохраняя 1-ю строку без изменений.
Я ищу какое-то общее решение, которое, учитывая некоторые команды, сохранит заголовок. Я обычно пишу заголовок в файл перед трубой, а затем возвращаю его обратно после окончания конвейера. Я начал использовать zshell, поэтому мне было интересно, может ли это помочь получить более оптимизированное решение.
Возможно, что-то вроде этого:
(стрелки трубы в изображении)
, но я не уверен, как получить, чтобы работать в zshell или, если это вообще возможно. Одна из проблем заключается в том, что мне нужно следить за первым разделом трубы с помощью команды на обеих трубах.
Любые творческие решения?
Я не уверен, что abouth zsh, но с bash вы можете использовать '(head -2 file1; tail -n +3 file1 | grep BLAH | sed 's/old/new /' | sort -k 1,1)> file3' –
@Vaughn Кажется, что вы учли в двух строках заголовка. Вероятно, вы имели в виду '(head -n +1 blah; tail -n +2 blah | sed 's/old/new' | sort -k 1,1)> outfile' – devnull
@devnull: Вы правы. Я привык работать с файлами с двумя строками заголовка и просто использовал это, не задумываясь. –