【发布时间】:2013-04-09 04:30:22
【问题描述】:
我广泛使用管道多个 linux shell 命令,例如:
grep BLAH file1 | sed 's/old/new/' | sort -k 1,1 > file3
我的文件通常有一个标题行,而且我经常必须在整个管道中保留它。因此,例如,我想从第 2 行开始进行 grep、sed 和排序,同时保持第 1 行不变。
我正在寻找一些通用的解决方案,给定一些命令会保留标题。我通常将标头写入管道之前的文件,然后在管道结束后将其返回。我已经开始使用 zshell,所以我想知道这是否有助于获得更简化的解决方案。
大概是这样的:
(图中箭头为管道)
但我不确定如何让它在 zshell 中工作,或者是否有可能。一个问题是我需要在两个管道上使用命令来跟进第一个管道拆分。
有什么创意解决方案吗?
【问题讨论】:
-
我不确定h zsh,但是对于bash,您可以使用
(head -2 file1;tail -n +3 file1 | grep BLAH | sed 's/old/new/' | sort -k 1,1) >file3 -
@Vaughn 您似乎考虑了 2 行标题。你的意思可能是
(head -n +1 blah; tail -n +2 blah | sed 's/old/new' | sort -k 1,1) > outfile -
@devnull:你是对的。我习惯于处理带有两个标题行的文件,只是不假思索地使用它。
-
+1 用于提供有用的图像来说明您的意图:-)