Home > Enterprise >  bash for finding line that contains string and including that as part of command
bash for finding line that contains string and including that as part of command

Time:10-13

I have a command that will print out three lines:

1-foo-1
1-bar-1
1-baz-1

I would like to include the result of this as part of a command where I search for the line that contains the string "bar" and then include that entire line as part of a command as follows: vi 1-bar-1

I was wondering what the bash awk and/or grep combination would be for getting this. Thank you.

I had tried the following but I'm getting the entire output. For example, I'd have a file rows.txt with this content:

1-foo-1
1-bar-1
1-baz-1

and then I'd run echo $(cat rows.txt | awk /^1-baz.*$/) and I'd get 1-foo-1 1-bar-1 1-baz-1 as a result when I'm looking for just 1-baz-1. Thank you.

CodePudding user response:

vi $(echo -e "1-foo-1\n1-bar-1\n1-baz-1\n" | grep bar | awk -F'-' '{print $2}')

The above script would equals vi bar


P.S.
echo -e "1-foo-1\n1-bar-1\n1-baz-1\n" is a demo to mimic your command output.


P.S.
You update the question... Now your goal becomes:

I'm looking for just 1-baz-1.

Then, the solution would be just

cat rows.txt | grep baz

CodePudding user response:

I search for the line that contains the string "bar":

A naive approach would be to just use

vi $(grep -F bar rows.txt)

However, you have to keep in mind a few things:

If your file contains several lines with bar, say

1-bar-1
2-bar-2

the editor will open both files. This may or may not what you want.

Another point to consider: If your file contains a line

1-foobar-1

this would be choosed as well. If you don't want this to happen, use

vi $(grep -Fw bar rows.txt)

The -w option requires that the pattern must be delimited by word boundaries.

  • Related