Friday, May 27, 2022

[SOLVED] Pass command-line arguments to grep as search patterns and print lines which match them all

Issue

I'm learning about grep commands. I want to make a program that when a user enters more than one word, outputs a line containing the word in the data file. So I connected the words that the user typed with '|' and put them in the grep command to create the program I intended. But this is OR operation. I want to make AND operation.

So I learned how to use AND operation with grep commands as follows.

cat <file> | grep 'pattern1' | grep 'pattern2' | grep 'pattern3'

But I don't know how to put the user input in the 'pattern1', 'pattern2', 'pattern3' position. Because the number of words the user inputs is not determined. As user input increases, grep must be executed using more and more pipes, but I don't know how to build this part.

The user input is as follows:

$ [the name of my program] 'pattern1' 'pattern2' 'pattern3' ...

I'd really appreciate your help.


Solution

suggesting to use awk pattern logic:

 awk '/RegExp-pattern-1/ && /RegExp-pattern-2/ && /RegExp-pattern-3/ 1' input.txt

The advantages: you can play with logic operators && || on RegExp patterns. And your are scanning the whole file once.

The disadvantages: must provide files list (can't traverse sub directories), and limited RegExp syntax compared to grep -E or grep -P



Answered By - Dudi Boy
Answer Checked By - David Goodson (WPSolving Volunteer)