44

現在、grep コマンドで問題が発生しています。

grep 検索の最後の行のみを表示する方法を見つけました。

grep PATERN FILE_NAME | tail -1

また、選択した複数のファイルで grep 検索を行う方法も見つけました。

find . -name "FILE_NAME" | xargs -I name grep PATERN name

ここで、単一ファイルごとに grep 結果の最後の行のみを取得したいと思います。私はこれを試しました:

 find . -name "FILE_NAME" | xargs -I name grep PATERN name | tail -1

これにより、最後のファイルの最後の値のみが返され、すべてのファイルに最後に一致するパターンが必要になります。

4

10 に答える 10

44
for f in $(find . -name "FILE_NAME"); do grep PATTERN $f | tail -1; done
于 2013-02-14T23:04:18.913 に答える
0

grep の -B (before) パラメータから開始できます。たとえば、試合前に 5 行を取得するには:

duli@i5 /etc/php5/apache2 $ grep -i -B5 timezone php.ini 
[CLI Server]
; Whether the CLI web server uses ANSI color coding in its terminal output.
cli_server.color = On

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
于 2016-01-17T00:47:50.527 に答える
0

各ファイルの最終行を取得します (ファイル名のプレフィックス)。次に、パターンに基づいて出力をフィルタリングします。

find . -name "*" -exec tail -v -n1 {} \; | grep "some_string" -B1

macOSでは、少し異なる方法で行う必要があります

find . -name "*" | xargs tail -1 | grep "some_string" -B1
于 2019-06-12T19:20:56.950 に答える
-1

ループを必要としない解決策があります。これにより、OPが必要とするものが得られます。

find . -type f -exec sh -c "fgrep print {} /dev/null |tail -1" \;

./tway.pl:print map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
./txml.py:           print("%s does not exist: %s\n" % (host, error))
./utils.py:print combine_dicts(a, b, operator.mul)
./xml_example.py:print ET.tostring(root, method="text")

なしで比較すると、ファイルあたりの行数tail -1多すぎますが、上記が機能することが証明されています。

find . -type f -exec sh -c "fgrep print {} /dev/null" \;

与える:

./tway.pl:print map(lambda x : x[1], filter(lambda x : x[0].startswith('volume'), globals().items()))
./txml.py:           print("%s resolved to --> %s\n" % (host, ip))
./txml.py:           print("%s does not exist: %s\n" % (host, error))
./utils.py:print "a", a
./utils.py:print "b", b
./utils.py:print combine_dicts(a, b, operator.mul)
./xml_example.py:    print ">>"
./xml_example.py:    print ET.tostring(e, method="text")
./xml_example.py:    print "<<"
./xml_example.py:print ET.tostring(root, method="text")

編集-出力にファイル名を含めたくない場合は、/ dev/nullを削除します。

于 2013-02-14T23:51:01.873 に答える
-1

最後の行を見つける別の方法は、ファイルを反転して最初の一致を出力することです。

find . -name "FILE_NAME" | xargs -I name sh -c 'tac name|sed -n "/PATTERN/{p;q}"'
于 2013-07-17T14:58:40.617 に答える
-1

これを行う最も簡単な方法は、ファイルから最後の 1 行 (またはそれ以上) の出力を取得し、それを grep することです。そう -

tail -1 filenames.* | grep "what you want to grep for"
于 2013-07-17T13:39:01.813 に答える