有没有一种方法可以将“head -1”和“grep”命令组合成一个命令,用于目录中的所有文件,并将输出重定向到一个输出文件。我可以使用“sed”完成此操作,但似乎它没有grep快。
sed -n '1p;/6330162/p' infile*.txt > outfile.txt
使用grep,我可以一次对一个文件执行以下操作:
head -1 infile1.txt; grep -i '6330162' infile1.txt > outfile.txt
然而,我需要对目录中的所有文件都这样做,插入通配符没有帮助,因为它首先打印标题,然后打印grep输出。
7条答案
按热度按时间iq0todco1#
下面的意思是你只需要输入一次命令(而不是使用&&然后输入两次),这也很容易理解。
例如:
更新:这似乎只适用于
ps
,抱歉,但我猜这通常是人们想要这个的目的。如果你想让它对任意命令起作用,你必须写一个迷你脚本,例如:
我把它命名为
hgrep.sh
,然后你可以这样使用:这种方法的好处是我们使用的是
grep
,因此所有标志的工作方式完全相同。7ivaypg92#
这将通过使用单个接收命令来实现:
它也很容易用于多行标题:
重申一下,@samthebest的解决方案只在非常特殊的情况下有效;这将适用于任何写入标准输出的命令。
hwazgwia3#
1cklez4t4#
我也会这么做的:
owfi6suc5#
你好好奇,你可以在cmd中使用xargs。
其中,/mahesh是文件所在的目录,而输出则放在/tmp/out.x中
91zkwejq6#
我编写了一个脚本
hgrep
来替换命令grep
:然后
df -h | hgrep tmpfs
将输出标题和行,包括tmpfs
这句话至关重要。
j5fpnvbx7#
如果perl可以,您可以用途:
some-command | perl -ne 'print if $.==1 | /some-stuff/'