对于一个目录中的所有文件,有没有办法将'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输出。
发布于 2012-10-17 01:36:38
for file in *
do
[ "$file" = outfile.txt ] && continue
head -n 1 "$file"
grep -i '...' "$file"
done > outfile.txt发布于 2013-10-14 17:07:18
下面的代码意味着您只需要输入一次命令(而不是使用&&并输入两次),它也很容易理解。
some-command | { head -1; grep some-stuff; }例如:
ps -ef | { head -1; grep python; }更新:这似乎只适用于ps,抱歉,但我猜这通常是人们想要的。
如果你想让它对任意命令起作用,似乎你必须写一个迷你脚本,例如:
#!/bin/bash
first_line=true
while read -r line; do
if [ "${first_line}" = "true" ]; then
echo "$line"
first_line=false
fi
echo "$line" | grep $*
done然后,您可以像这样使用:
ps -ef | ./hgrep.sh -i chrome这种方法的好处是我们使用了grep,所以所有的标志都是完全一样的。
发布于 2018-05-07 05:45:30
这将通过使用单个接收命令来工作:
some-command | sed -n '1p;/PATTERN/p'这也很容易与多行标题一起使用:
$ sudo netstat --tcp --udp --listening --numeric --program | sed --quiet '1,2p;/ssh/p'
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1258/sshd
tcp6 0 0 :::22 :::* LISTEN 1258/sshd 对于reiterate来说,@samthebest的解决方案只能在非常特定的情况下工作;这将适用于任何写入标准输出的命令。
https://stackoverflow.com/questions/12920317
复制相似问题