在“grep”可以结果包括插头(Include header in the 'grep

2019-08-01 13:33发布

有没有一种方式,以“头-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的输出。

Answer 1:

for file in *
do
  [ "$file" = outfile.txt ] && continue
  head -n 1 "$file"
  grep -i '...' "$file"
done > outfile.txt


Answer 2:

下面意味着你只需要输入一次命令(而不是使用&&和输入两次),这也是很容易理解。

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所以所有标志的工作原理完全相同。



Answer 3:

这将通过使用一个接收命令的工作:

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的解决方案只会工作在非常特殊的情况; 这将与写到标准输出的任何命令工作。



Answer 4:

你好好奇的你可以用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



Answer 5:

我会做的是:

ps -fe | awk '{ if ( tolower($0) ~ /network/ || NR == 1 ) print $0}' 


文章来源: Include header in the 'grep' result
标签: shell grep