Grep精确匹配字符串,空格为变量

时间:2019-03-15 13:56:16

标签: awk grep

我有:

file.csv

其中包含

2,1,"string with spaces",3,4,5
2,1,"some other string",3,4,5
2,1,"string with spaces more than this",3,4,5
2,1,"yet another",3,4,5
2,1,"string with spaces too",3,4,5

当我这样做时:

grep '"string with spaces",' file.csv

它产生所需的结果:

2,1,"string with spaces",3,4,5

现在我需要在while循环中这样做:

while read p; do

    grep '"$p",' file.csv

done < list.txt

位置:

list.txt

包含:

string with spaces
yet another

我想要的输出是:

2,1,"string with spaces",3,4,5
2,1,"yet another",3,4,5

问题是我的while循环返回为空或部分匹配。如何遍历list.txt并获得所需的输出?

3 个答案:

答案 0 :(得分:4)

如果您对notebook 5.7.6感到满意,那么这应该很容易。

awk

OR(根据Ed ir先生的评论,将字段分隔符设置为逗号并保持更清晰,可以尝试跟随)

awk 'FNR==NR{a[$0];next} ($4 in a)' list.txt FS="[,\"]" file.csv

输出如下。

awk -F, 'FNR==NR{a["\""$0"\""];next} $3 in a' list.txt file.csv

答案 1 :(得分:2)

您所有的字符串引用都使用单引号app/Kernel.php,它不会对'变量进行任何插值。将其更改为$p将解决此问题。关键在于这里的变量插值是在双引号grep '"'"$p"'",' file.csv内完成的,然后与包含实际双引号"的字符串连接起来。

更多(或更少,取决于您的观点)的可读版本可能如下所示:"

答案 2 :(得分:0)

 grep -Ff strings.txt file.csv

这应该使您足够远。