Find files (not) containing text pattern on a specified line












0














I'm trying to search through a set of text files and return the names of files that on a specified line contain a text pattern OR do not contain the text on the specified.
In my case I need to return the filenames of files whose last line does not contain the text pattern.



file1.txt




line1 abc
line2 must have




file2.txt




line1 must have
line2 return me




the function/command, when passed "must have", should return ONLY file2.txt, because it does not contain "must have" on the last line.










share|improve this question







New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • I think instead of 'specified line' you want to say 'last line', throughout?
    – Jeff Schaller
    yesterday
















0














I'm trying to search through a set of text files and return the names of files that on a specified line contain a text pattern OR do not contain the text on the specified.
In my case I need to return the filenames of files whose last line does not contain the text pattern.



file1.txt




line1 abc
line2 must have




file2.txt




line1 must have
line2 return me




the function/command, when passed "must have", should return ONLY file2.txt, because it does not contain "must have" on the last line.










share|improve this question







New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.




















  • I think instead of 'specified line' you want to say 'last line', throughout?
    – Jeff Schaller
    yesterday














0












0








0







I'm trying to search through a set of text files and return the names of files that on a specified line contain a text pattern OR do not contain the text on the specified.
In my case I need to return the filenames of files whose last line does not contain the text pattern.



file1.txt




line1 abc
line2 must have




file2.txt




line1 must have
line2 return me




the function/command, when passed "must have", should return ONLY file2.txt, because it does not contain "must have" on the last line.










share|improve this question







New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











I'm trying to search through a set of text files and return the names of files that on a specified line contain a text pattern OR do not contain the text on the specified.
In my case I need to return the filenames of files whose last line does not contain the text pattern.



file1.txt




line1 abc
line2 must have




file2.txt




line1 must have
line2 return me




the function/command, when passed "must have", should return ONLY file2.txt, because it does not contain "must have" on the last line.







linux awk sed grep find






share|improve this question







New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question







New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question






New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked yesterday









youngfu

1




1




New contributor




youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






youngfu is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












  • I think instead of 'specified line' you want to say 'last line', throughout?
    – Jeff Schaller
    yesterday


















  • I think instead of 'specified line' you want to say 'last line', throughout?
    – Jeff Schaller
    yesterday
















I think instead of 'specified line' you want to say 'last line', throughout?
– Jeff Schaller
yesterday




I think instead of 'specified line' you want to say 'last line', throughout?
– Jeff Schaller
yesterday










1 Answer
1






active

oldest

votes


















1














To check the contents of the last line of each file in the current directory, use tail and grep:



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


This assumes your text files are named ending with .txt; adjust that wildcard as needed. The tail -1 grabs the last line of the file (seeking backwards, which is more efficient than potentially reading forwards through the file); that line is then piped to grep to look for the desired text. The -q flag to grep tells it to be quiet about its work, and simply set the return code accordingly. If grep does not find a match, then the || "or" alternation tells the shell to execute printf, which prints the filename.



You could put that code in a script or in a function:



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





share|improve this answer





















    Your Answer








    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "106"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });






    youngfu is a new contributor. Be nice, and check out our Code of Conduct.










    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f490202%2ffind-files-not-containing-text-pattern-on-a-specified-line%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    To check the contents of the last line of each file in the current directory, use tail and grep:



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


    This assumes your text files are named ending with .txt; adjust that wildcard as needed. The tail -1 grabs the last line of the file (seeking backwards, which is more efficient than potentially reading forwards through the file); that line is then piped to grep to look for the desired text. The -q flag to grep tells it to be quiet about its work, and simply set the return code accordingly. If grep does not find a match, then the || "or" alternation tells the shell to execute printf, which prints the filename.



    You could put that code in a script or in a function:



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





    share|improve this answer


























      1














      To check the contents of the last line of each file in the current directory, use tail and grep:



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


      This assumes your text files are named ending with .txt; adjust that wildcard as needed. The tail -1 grabs the last line of the file (seeking backwards, which is more efficient than potentially reading forwards through the file); that line is then piped to grep to look for the desired text. The -q flag to grep tells it to be quiet about its work, and simply set the return code accordingly. If grep does not find a match, then the || "or" alternation tells the shell to execute printf, which prints the filename.



      You could put that code in a script or in a function:



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





      share|improve this answer
























        1












        1








        1






        To check the contents of the last line of each file in the current directory, use tail and grep:



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


        This assumes your text files are named ending with .txt; adjust that wildcard as needed. The tail -1 grabs the last line of the file (seeking backwards, which is more efficient than potentially reading forwards through the file); that line is then piped to grep to look for the desired text. The -q flag to grep tells it to be quiet about its work, and simply set the return code accordingly. If grep does not find a match, then the || "or" alternation tells the shell to execute printf, which prints the filename.



        You could put that code in a script or in a function:



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





        share|improve this answer












        To check the contents of the last line of each file in the current directory, use tail and grep:



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


        This assumes your text files are named ending with .txt; adjust that wildcard as needed. The tail -1 grabs the last line of the file (seeking backwards, which is more efficient than potentially reading forwards through the file); that line is then piped to grep to look for the desired text. The -q flag to grep tells it to be quiet about its work, and simply set the return code accordingly. If grep does not find a match, then the || "or" alternation tells the shell to execute printf, which prints the filename.



        You could put that code in a script or in a function:



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






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered yesterday









        Jeff Schaller

        38.4k1053125




        38.4k1053125






















            youngfu is a new contributor. Be nice, and check out our Code of Conduct.










            draft saved

            draft discarded


















            youngfu is a new contributor. Be nice, and check out our Code of Conduct.













            youngfu is a new contributor. Be nice, and check out our Code of Conduct.












            youngfu is a new contributor. Be nice, and check out our Code of Conduct.
















            Thanks for contributing an answer to Unix & Linux Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f490202%2ffind-files-not-containing-text-pattern-on-a-specified-line%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Entries order in /etc/network/interfaces

            新発田市

            Grub takes very long (several minutes) to open Menu (in Multi-Boot-System)