24

ディレクトリ内のすべてのファイルに対して「head -1」コマンドと「grep」コマンドを 1 つに結合し、出力を出力ファイルにリダイレクトする方法はありますか。「sed」を使用してこれを行うことができますが、grep ほど高速ではないようです。

sed -n '1p;/6330162/p' infile*.txt > outfile.txt

grep を使用すると、一度に次の 1 つのファイルを実行できます。

head -1 infile1.txt;  grep -i '6330162' infile1.txt > outfile.txt

ただし、ディレクトリ内のすべてのファイルに対して行う必要があります。ワイルドカードを挿入しても、最初にヘッダーが出力され、次に grep 出力が出力されるため、役に立ちません。

4

6 に答える 6

16

これは、単一の受信コマンドを使用して機能します。

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 のソリューションは非常に特殊な状況でのみ機能します。これは、標準出力に書き込むすべてのコマンドで機能します。

于 2018-05-06T21:45:30.190 に答える
3
for file in *
do
  [ "$file" = outfile.txt ] && continue
  head -n 1 "$file"
  grep -i '...' "$file"
done > outfile.txt
于 2012-10-16T17:36:37.977 に答える
0

こんにちはおさるさんは、cmd で xargs を使用できます。

find /mahesh  -type f |xargs -I {} -t /bin/sh -c "head -1 {}>>/tmp/out.x|grep -i 6330162 {} >>/tmp/out.x"

/mahesh はファイルがあるディレクトリで、出力は /tmp/out.x 内に配置されます

于 2012-10-17T10:14:02.037 に答える
0

hgrepコマンドを置き換えるスクリプトを作成しましたgrep

#!/bin/bash

content=`cat`
echo "$content" | head -1
echo "$content" | tail -n+2 | grep "$@"

次にdf -h | hgrep tmpfs、ヘッダーと行が含まれますtmpfs

引用は不可欠です。

于 2021-09-27T07:57:17.867 に答える