Printing a string when grep does not get a matchGrep 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 --color=auto breaks when ^M is inside colored matchGrep -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 string
Can i hide one of my siamese twins heads in public?
Shortest way to get an EOF Error
Why is coffee provided during big chess events when it contains a banned substance?
Negative feedbacks and "Language smoother"
How can I cut a metal pipe while preserving the wires inside?
SSD or HDD for server
Find closest power of 2 to a specific number
How can demon technology be prevented from surpassing humans?
Proofreading a novel: is it okay to use a question mark with an exclamation mark - "?!"
The colors in Resident Evil 7 are *completely* off
"Shake your head all you like" meaning
Difference between head and tail
"Dear Stack Exchange, I am very disappointed in you" - How to construct a strong opening line in a letter?
I didn't do any exit passport control when leaving Japan. What should I do?
Employer says he needs to delay payment by 3 months due to bureaucracy
Can a character dodge an attack that beats their Armor Class?
How to deal with intolerable behavior of a subordinate?
Can the bass be used instead of drums?
Disrespectful employee going above my head and telling me what to do. I am his manager
Fill a bowl with alphabet soup
Do you say "good game" after a game in which your opponent played poorly?
How does Firefox know my ISP login page?
Did smallpox emerge in 1580?
Move editor name in biblatex bibliography
Printing a string when grep does not get a match
Grep 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 --color=auto breaks when ^M is inside colored matchGrep -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 string
.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
2271 silver badge5 bronze badges
2271 silver badge5 bronze badges
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 ' if (/kwd1' 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/4.0/"u003ecc by-sa 4.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
pLumopLumo
7,92115 silver badges36 bronze badges
7,92115 silver badges36 bronze badges
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 ' if (/kwd1' 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 ' if (/kwd1' 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 ' if (/kwd1' 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 ' if (/kwd1' 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
7,8211 gold badge18 silver badges35 bronze badges
7,8211 gold badge18 silver badges35 bronze badges
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