特定の文字列で終わらないディレクトリ内のすべてのファイル?

特定の文字列で終わらないディレクトリ内のすべてのファイル?

ディレクトリ内のすべてのテキストファイルを見つけたいです。欲しくない文字列で終わります:

hello world

どうすればいいですか?

答え1

努力する:

for f in *; do
  if [ -f "$f" ] && [ "$(tail -n1 -- "$f")" != "hello world" ]; then
      printf '%s\n' "$f"
  fi
done

答え2

次のテストバージョンをお試しください。

#!/usr/bin/awk -f
BEGIN {
  last=FILENAME;
}
{
  if (last != FILENAME) {
    if (line !~ /^hello world$/ && line != "hello world") {
      print last;
    }
    last=FILENAME;
  }
  line=$0;
}
END {
  if (line !~ /^hello world$/ && line != "hello world") {
      print FILENAME;
  }
}

テストを受ける:

$ chmod +x script.awk
$ ls
script.awk  test1.txt  test2.txt  test3.txt

$ ./script.awk $(find . -type f -exec file {} + | fgrep text | cut -d: -f1)

./script.awk
./test1.txt

答え3

cd /my/directory/path
for file in *
do
 grep -v '^$' < "${file}" | tail -1 | grep "hello world" > /dev/null; result=${?}
 if [ "${result}" -ne 0 ]
 then
   echo "${file}" 
 fi
done

このgrep -v '^$' < "${file}"セクションでは、最後に追加できる空白行を削除します。必要でない場合は、その部分を省略し、次のように行を渡すことができます。tail -1 < "${file}"

関連情報