Find files (not) containing text pattern on a specified line
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
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.
add a comment |
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
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
add a comment |
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
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
linux awk sed grep find
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.
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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
}
add a comment |
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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
}
add a comment |
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
}
add a comment |
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
}
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
}
answered yesterday
Jeff Schaller
38.4k1053125
38.4k1053125
add a comment |
add a comment |
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.
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.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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
I think instead of 'specified line' you want to say 'last line', throughout?
– Jeff Schaller
yesterday