grep
itself is able to do so. Simply use the flag -f
:
grep -f <patterns> <file>
<patterns>
is a file containing one pattern in each line; and <file>
is the file in which you want to search things.
Note that, to force grep
to consider each line a pattern, even if the contents of each line look like a regular expression, you should use the flag -F, --fixed-strings
.
grep -F -f <patterns> <file>
If your file is a CSV, as you said, you may do:
grep -f <(tr ',' '
' < data.csv) <file>
As an example, consider the file "a.txt", with the following lines:
alpha
0891234
beta
Now, the file "b.txt", with the lines:
Alpha
0808080
0891234
bEtA
The output of the following command is:
grep -f "a.txt" "b.txt"
0891234
You don't need at all to for
-loop here; grep
itself offers this feature.
Now using your file names:
#!/bin/bash
patterns="/home/nimish/contents.txt"
search="/home/nimish/another_file.csv"
grep -f <(tr ',' '
' < "${patterns}") "${search}"
You may change ','
to the separator you have in your file.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…