有没有一种方式,以“头-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的输出。
for file in *
do
[ "$file" = outfile.txt ] && continue
head -n 1 "$file"
grep -i '...' "$file"
done > outfile.txt
下面意味着你只需要输入一次命令(而不是使用&&和输入两次),这也是很容易理解。
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
我将其命名hgrep.sh
。 然后你可以使用这样的:
ps -ef | ./hgrep.sh -i chrome
这种方法的好处是,我们正在使用grep
所以所有标志的工作原理完全相同。
这将通过使用一个接收命令的工作:
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
要重申 ,@ samthebest的解决方案只会工作在非常特殊的情况; 这将与写到标准输出的任何命令工作。
你好好奇的你可以用xargs的与CMD。
find /mahesh -type f |xargs -I {} -t /bin/sh -c "head -1 {}>>/tmp/out.x|grep -i 6330162 {} >>/tmp/out.x"
凡/马赫什是目录中的文件和输出放在里面/tmp/out.x
我会做的是:
ps -fe | awk '{ if ( tolower($0) ~ /network/ || NR == 1 ) print $0}'