Grep $value `grep $value2 `<command>`` - Nested grep?

bash, grep, nested

Solution

grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)`

This isn't right. The backticks (``command``) and `$(command)` do the same thing, it's just an alternative syntax. The advantage of using `$()` is that it's better nestable, so it's a good habit to always use that.

So, let's fix this, we now end up with:

grep "$value" "$(exim -Mvh "$(exim -bpru | grep "$eximID")")" | more

I relocated the `more` command, for what I think will be obvious reasons. `more` just paginates data for the user, feeding the output of `more` to something else almost never makes sense.

I've also quoted the variables, this is also a good habit, because otherwise things will break when there are certain characters in your variable (most common is the a space).

I can't test if this gives you the output you want, if it doesn't, then update your answer with a few lines of example data, and the expected output.

Problem

I'm a complete noob at awk/sed so forgive me if I'm missing something obvious here. Basically I'm trying to do a nested grep, i.e. something akin to: ``` grep $value `exim -Mvh $(`exim -bpru | grep $eximID | more`)` ``` Breakdown: ``` grep $value IN COMMAND --> exim -Mvh (print exim mail headers) FROM RESULTS OF ---> exim -bpru | grep $eximID | more ``` - `$value` is the string I'm looking for - `$eximID` is the string I'm looking for within exim -bpru (list all exim thingies) No idea if what I'm trying to accomplish would be easier with awk/sed hence the question really. I tried to make that as legible as possible but nested nesting is hard yo Edit Tada! My script is now workings thanks to you guys! Here it is, unfinished, but working: ``` #!/usr/bin/bash echo "Enter the email address you want to search for + compare sender info via exim IDs." read searchTarget echo "Enter the target domain the email is coming from." read searchDomain #domanList is array for list of exim IDs needed domainList=($(exim -bpru | grep "$searchDomain" | awk '{ print $3 }')) for i in "${domainList[@]}" do echo "$(exim -Mvh $i | grep $searchTarget)" #echo "$(grep $searchTarget $(exim -Mvh $i))" done ```

Original source

Related problems