Search code examples
bashawkfindhead

Print names of files with proper head


I want to get the name of files in current directory such that the first line of the file is equal to myWord. I wanted to combine find . -type f command with -exec option with head -1 filename but to no avail. Is there some clever, one-line solution to this problem?


Solution

  • You can use find with awk:

    find . -maxdepth 1 -type f -exec awk '/myWord/{print FILENAME} {nextfile}' {} +
    

    awk command will search first line of each file for the word myWord then it prints that filename.

    Or using gnu sed:

    find . -type f -exec sed '/myWord/F;Q' {} \;
    

    Many thanks to @chepner and @123 for extremely helpful comments below this answer.