指定された行にテキストパターンを含む(含まれていない)ファイルを見つける

指定された行にテキストパターンを含む(含まれていない)ファイルを見つける

テキストファイルセットを検索し、次のファイルの名前を返そうとします。指定された行にテキストパターンを含むか、指定されたテキストを含めません。私の場合は、最後の行にテキストパターンが含まれていないファイルのファイル名を返す必要があります。

ファイル1.txt

line1 abc
line2が必要です

ファイル2.txt


line1はline2が私を返すようにしなければなりません。

"must have"が渡された場合、関数/コマンドは最後の行に "must have"が含まれていないため、file2.txtのみを返す必要があります。

ベストアンサー1

現在のディレクトリにあるすべてのファイルの最後の行の内容を調べるには、次のようにtailしますgrep

for file in *.txt
do
  tail -1 -- "$file" | grep -q "must have" || printf '%s\n' "$file"
done

これはテキストファイルの名前です.txt。以降に指定されたとします。必要に応じてワイルドカードを調整します。tail -1ファイルの最後の行をつかんで(後方に表示する方がファイルを前に読むよりも効率的です)、その行にパイプして必要なgrepテキストを見つけます。 grepのフラグはジョブを-q静かにし、それに応じて戻りコードを設定するように指示します。 grepがそうであればいいえ一致するものが見つかると、||「or」はシェルに実行を交互に指示してprintfファイル名を出力します。

このコードをスクリプトまたは関数に入れることができます。

lastlinehas() {
  for file in *.txt
  do
    tail -1 -- "$file" | grep -q "$1" || printf '%s\n' "$file"
  done
}

おすすめ記事