Printing a string when grep does not get a matchRedirect grep out to a file does not workGrep a specific word in a single string with repetitionsMatch exact string using grepgrep string where next line does not contain stringHow to use grep when file does not contain the stringGrep -H not always returning file path when two matches are on the same lineHow to grep MATCH colored input?Check if a file contains an exact match string from another file using grepsed or awk or grep to get first dynamic occurence of a stringGrepping string, but include all non-blank lines following each grep match
99 coins into the sacks
Why did Ham the Chimp push levers?
Why doesn't Dany protect her dragons better?
Did any early RISC OS precursor run on the BBC Micro?
Magical Modulo Squares
Using mean length and mean weight to calculate mean BMI?
How do I give a darkroom course without negatives from the attendees?
What is the oldest instrument ever?
The unknown and unexplained in science fiction
What dice to use in a game that revolves around triangles?
What should I use to get rid of some kind of weed in my onions
How long can fsck take on a 30 TB volume?
How to explain intravenous drug abuse to a 6-year-old?
Are there vaccine ingredients which may not be disclosed ("hidden", "trade secret", or similar)?
Can I bring back Planetary Romance as a genre?
Exactly which act of bravery are Luke and Han awarded a medal for?
How can it be that ssh somename works, while nslookup somename does not?
Align a table column at a specific symbol
Two (probably) equal real numbers which are not proved to be equal?
Names of the Six Tastes
Should one save up to purchase a house/condo or maximize their 401(k) first?
How can I test a shell script in a "safe environment" to avoid harm to my computer?
Is the tensor product (of vector spaces) commutative?
How can one see if an address is multisig?
Printing a string when grep does not get a match
Redirect grep out to a file does not workGrep a specific word in a single string with repetitionsMatch exact string using grepgrep string where next line does not contain stringHow to use grep when file does not contain the stringGrep -H not always returning file path when two matches are on the same lineHow to grep MATCH colored input?Check if a file contains an exact match string from another file using grepsed or awk or grep to get first dynamic occurence of a stringGrepping string, but include all non-blank lines following each grep match
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
Suppose I have two files which look as follows:
$ cat search_file.txt
This line contains kwd1.
This line contains kwd2.
This line contains no match.
This line contains no match.
This line contains kwd5.
$ cat search_kwd.sh
grep kwd1 search_file.txt
grep kwd2 search_file.txt
grep kwd3 search_file.txt
grep kwd4 search_file.txt
grep kwd5 search_file.txt
When I run search_kwd.sh, I get:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
This line contains kwd5.
I want to print a string
whenever grep does not get a match. The output would look like:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
string
string
This line contains kwd5.
How do I go about doing this in bash?
bash grep
add a comment |
Suppose I have two files which look as follows:
$ cat search_file.txt
This line contains kwd1.
This line contains kwd2.
This line contains no match.
This line contains no match.
This line contains kwd5.
$ cat search_kwd.sh
grep kwd1 search_file.txt
grep kwd2 search_file.txt
grep kwd3 search_file.txt
grep kwd4 search_file.txt
grep kwd5 search_file.txt
When I run search_kwd.sh, I get:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
This line contains kwd5.
I want to print a string
whenever grep does not get a match. The output would look like:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
string
string
This line contains kwd5.
How do I go about doing this in bash?
bash grep
add a comment |
Suppose I have two files which look as follows:
$ cat search_file.txt
This line contains kwd1.
This line contains kwd2.
This line contains no match.
This line contains no match.
This line contains kwd5.
$ cat search_kwd.sh
grep kwd1 search_file.txt
grep kwd2 search_file.txt
grep kwd3 search_file.txt
grep kwd4 search_file.txt
grep kwd5 search_file.txt
When I run search_kwd.sh, I get:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
This line contains kwd5.
I want to print a string
whenever grep does not get a match. The output would look like:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
string
string
This line contains kwd5.
How do I go about doing this in bash?
bash grep
Suppose I have two files which look as follows:
$ cat search_file.txt
This line contains kwd1.
This line contains kwd2.
This line contains no match.
This line contains no match.
This line contains kwd5.
$ cat search_kwd.sh
grep kwd1 search_file.txt
grep kwd2 search_file.txt
grep kwd3 search_file.txt
grep kwd4 search_file.txt
grep kwd5 search_file.txt
When I run search_kwd.sh, I get:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
This line contains kwd5.
I want to print a string
whenever grep does not get a match. The output would look like:
$ sh search_kwd.sh
This line contains kwd1.
This line contains kwd2.
string
string
This line contains kwd5.
How do I go about doing this in bash?
bash grep
bash grep
edited Apr 29 at 12:55
BhushanDhamale
asked Apr 29 at 12:50
BhushanDhamaleBhushanDhamale
2105
2105
add a comment |
add a comment |
3 Answers
3
active
oldest
votes
grep
exits with non-zero code when nothing found.
From man grep
:
Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.
So you can use:
grep kwd3 search_file.txt || echo "string"
1
+1 for the idiomatic use of||
; I was about to suggestif
which does the same thing in a clunkier and more unwieldy manner.
– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
add a comment |
To expand on @RoVo's answer, you can use a for loop to iterate over all your queries:
for term in "kwd1" "kwd2" "kwd3" "kwd4" "kwd5"; do
grep "$term" search_file.txt || echo "string"`
done
add a comment |
As the requested output seems to have one line of output for each line of input, where the line is just copied if it matches and is replaced if it doesn't, there are better ways to do this than reading the file 5 times and printing out the lines in the order they are found in the search_kwd.sh file rather than the input file.
Instead you should process the input file 1 line at a time. There are lots of tools that can do this. For example
#!/bin/sh
sed -e '/kwd1/p;d
/kwd2/p;d
/kwd3/p;d
/kwd4/p;d
/kwd5/p;d
s/.*/string/' search_file.txt
which says for each of the matching kewwords print out the line, then discard it and move onto the next line. If it gets through all the keywords and none match then change the line to string (and then implicitly print it).
You could use awk
with something like this
#!/bin/sh
awk 'kwd2' search+file.txt
You could have a pure shell implementation
#!/bin/sh
while read -r line
do
case "$line" in
(*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%sn' "$line" ;;
(*) printf '%sn' "string" ;;
esac
done < search_file.txt
You could use perl, ruby, python, as well.
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
);
);
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%2f516161%2fprinting-a-string-when-grep-does-not-get-a-match%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
grep
exits with non-zero code when nothing found.
From man grep
:
Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.
So you can use:
grep kwd3 search_file.txt || echo "string"
1
+1 for the idiomatic use of||
; I was about to suggestif
which does the same thing in a clunkier and more unwieldy manner.
– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
add a comment |
grep
exits with non-zero code when nothing found.
From man grep
:
Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.
So you can use:
grep kwd3 search_file.txt || echo "string"
1
+1 for the idiomatic use of||
; I was about to suggestif
which does the same thing in a clunkier and more unwieldy manner.
– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
add a comment |
grep
exits with non-zero code when nothing found.
From man grep
:
Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.
So you can use:
grep kwd3 search_file.txt || echo "string"
grep
exits with non-zero code when nothing found.
From man grep
:
Normally the exit status is 0 if a line is selected, 1 if no lines were selected, and 2 if an error occurred.
So you can use:
grep kwd3 search_file.txt || echo "string"
edited Apr 29 at 13:04
answered Apr 29 at 13:01
RoVoRoVo
4,599522
4,599522
1
+1 for the idiomatic use of||
; I was about to suggestif
which does the same thing in a clunkier and more unwieldy manner.
– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
add a comment |
1
+1 for the idiomatic use of||
; I was about to suggestif
which does the same thing in a clunkier and more unwieldy manner.
– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
1
1
+1 for the idiomatic use of
||
; I was about to suggest if
which does the same thing in a clunkier and more unwieldy manner.– Draconis
Apr 29 at 15:54
+1 for the idiomatic use of
||
; I was about to suggest if
which does the same thing in a clunkier and more unwieldy manner.– Draconis
Apr 29 at 15:54
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
This only tests for one of the examples, not all of them.
– Monty Harder
Apr 29 at 17:55
add a comment |
To expand on @RoVo's answer, you can use a for loop to iterate over all your queries:
for term in "kwd1" "kwd2" "kwd3" "kwd4" "kwd5"; do
grep "$term" search_file.txt || echo "string"`
done
add a comment |
To expand on @RoVo's answer, you can use a for loop to iterate over all your queries:
for term in "kwd1" "kwd2" "kwd3" "kwd4" "kwd5"; do
grep "$term" search_file.txt || echo "string"`
done
add a comment |
To expand on @RoVo's answer, you can use a for loop to iterate over all your queries:
for term in "kwd1" "kwd2" "kwd3" "kwd4" "kwd5"; do
grep "$term" search_file.txt || echo "string"`
done
To expand on @RoVo's answer, you can use a for loop to iterate over all your queries:
for term in "kwd1" "kwd2" "kwd3" "kwd4" "kwd5"; do
grep "$term" search_file.txt || echo "string"`
done
answered Apr 29 at 19:04
cyberboxstercyberboxster
101
101
add a comment |
add a comment |
As the requested output seems to have one line of output for each line of input, where the line is just copied if it matches and is replaced if it doesn't, there are better ways to do this than reading the file 5 times and printing out the lines in the order they are found in the search_kwd.sh file rather than the input file.
Instead you should process the input file 1 line at a time. There are lots of tools that can do this. For example
#!/bin/sh
sed -e '/kwd1/p;d
/kwd2/p;d
/kwd3/p;d
/kwd4/p;d
/kwd5/p;d
s/.*/string/' search_file.txt
which says for each of the matching kewwords print out the line, then discard it and move onto the next line. If it gets through all the keywords and none match then change the line to string (and then implicitly print it).
You could use awk
with something like this
#!/bin/sh
awk 'kwd2' search+file.txt
You could have a pure shell implementation
#!/bin/sh
while read -r line
do
case "$line" in
(*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%sn' "$line" ;;
(*) printf '%sn' "string" ;;
esac
done < search_file.txt
You could use perl, ruby, python, as well.
add a comment |
As the requested output seems to have one line of output for each line of input, where the line is just copied if it matches and is replaced if it doesn't, there are better ways to do this than reading the file 5 times and printing out the lines in the order they are found in the search_kwd.sh file rather than the input file.
Instead you should process the input file 1 line at a time. There are lots of tools that can do this. For example
#!/bin/sh
sed -e '/kwd1/p;d
/kwd2/p;d
/kwd3/p;d
/kwd4/p;d
/kwd5/p;d
s/.*/string/' search_file.txt
which says for each of the matching kewwords print out the line, then discard it and move onto the next line. If it gets through all the keywords and none match then change the line to string (and then implicitly print it).
You could use awk
with something like this
#!/bin/sh
awk 'kwd2' search+file.txt
You could have a pure shell implementation
#!/bin/sh
while read -r line
do
case "$line" in
(*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%sn' "$line" ;;
(*) printf '%sn' "string" ;;
esac
done < search_file.txt
You could use perl, ruby, python, as well.
add a comment |
As the requested output seems to have one line of output for each line of input, where the line is just copied if it matches and is replaced if it doesn't, there are better ways to do this than reading the file 5 times and printing out the lines in the order they are found in the search_kwd.sh file rather than the input file.
Instead you should process the input file 1 line at a time. There are lots of tools that can do this. For example
#!/bin/sh
sed -e '/kwd1/p;d
/kwd2/p;d
/kwd3/p;d
/kwd4/p;d
/kwd5/p;d
s/.*/string/' search_file.txt
which says for each of the matching kewwords print out the line, then discard it and move onto the next line. If it gets through all the keywords and none match then change the line to string (and then implicitly print it).
You could use awk
with something like this
#!/bin/sh
awk 'kwd2' search+file.txt
You could have a pure shell implementation
#!/bin/sh
while read -r line
do
case "$line" in
(*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%sn' "$line" ;;
(*) printf '%sn' "string" ;;
esac
done < search_file.txt
You could use perl, ruby, python, as well.
As the requested output seems to have one line of output for each line of input, where the line is just copied if it matches and is replaced if it doesn't, there are better ways to do this than reading the file 5 times and printing out the lines in the order they are found in the search_kwd.sh file rather than the input file.
Instead you should process the input file 1 line at a time. There are lots of tools that can do this. For example
#!/bin/sh
sed -e '/kwd1/p;d
/kwd2/p;d
/kwd3/p;d
/kwd4/p;d
/kwd5/p;d
s/.*/string/' search_file.txt
which says for each of the matching kewwords print out the line, then discard it and move onto the next line. If it gets through all the keywords and none match then change the line to string (and then implicitly print it).
You could use awk
with something like this
#!/bin/sh
awk 'kwd2' search+file.txt
You could have a pure shell implementation
#!/bin/sh
while read -r line
do
case "$line" in
(*"kwd1"*|*"kwd2"*|*"kwd3"*|*"kwd4"*|*"kwd5"*) printf '%sn' "$line" ;;
(*) printf '%sn' "string" ;;
esac
done < search_file.txt
You could use perl, ruby, python, as well.
answered Apr 29 at 19:16
icarusicarus
6,30111231
6,30111231
add a comment |
add a comment |
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.
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%2f516161%2fprinting-a-string-when-grep-does-not-get-a-match%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