ファイル名と同じ行にgrep一致数を追加する

ファイル名と同じ行にgrep一致数を追加する

特定の単語/パターンの一致数を見つけるために、特定のディレクトリの下のすべてのファイルを検索したいと思います。しかし、ファイル名の直後に数字が現れることを望みます。

次のようにしましたが、最後の行ではなく新しい行に数が記録されます。

grep -rc "WORD" /home/user/data >> file

実際の出力

foo
12

希望の出力:

foo12

ベストアンサー1

を使用すると、>> fileファイルは追加モードのstdoutで開きます。したがって、すべての出力はファイルの末尾にあります。

grep書いた12\n。あなたのファイルはfoo\n事前に含まれています。それからそこにありますfoo\n12\n。を取得するためにfoo12\n最後に出力する必要はありませんが、最後の前の最後のバイトを上書き\nします12\n

一部のシェルには対応する演算子があります。

そしてzsh

zmodload zsh/system
if sysseek -u 1 -w end -1; then
  grep -c WORD /home/user/data
else
  syserror -p "Can't seek to just before the end: "
fi 1<> file

そしてksh93

grep -c WORD /home/user/data 1<> file >#((EOF - 1))

<>読み取り+書き込みモードでファイルを開くリダイレ​​クト演算子です。ここで私たちは気にしません読む一部ですが、<>逆の方法で使用する>と、ファイルは切り捨てられません。

とにかくこれ追加モデル。他のプロセスも同時にファイルに書き込んだり切り捨てたりすると、違いを確認できます(あなたの場合は問題になる可能性が低い)。

別のアプローチは、ファイルを切り取り、末尾を削除してから\nファイルを開くことです。追加モデル。

GNUの使用truncate:

truncate -s -1 file && grep -c WORD /home/user/data >> file

おすすめ記事