我正在尝试使用perl在csv文件中搜索文本。但我需要完全匹配,让我们看看我是否正在搜索一个单词我不希望脚本在结果中显示美国。我试过用“”& / b在开头和结尾,如果我将值从CSV存储到数组,但是如果我想直接在CSv中搜索它不起作用。 我的$ curr = U. if(grep $ curr,“test.csv”) 打印“完成”
这显示我是美国的输出
答案 0 :(得分:4)
首先,让我纠正你的误解。这样:
grep "U", "test.csv"
对于字符串grep
, ...不test.csv
文件U
,它会对test.csv
计算到的项目的字符串列表"U"
进行查询true(所有这些都是"U"
总是如此)。在Perl中,grep
应用于参数列表,如下所示:
grep /foo/, @list;
但是,您不需要grep
。使用它意味着将整个文件读入内存以创建grep
的参数列表,一般来说这样做没有任何好处,而且大多只是增加了成本。
我假设您在这里寻找的是一种检查csv文件中的确切字符串的简单方法。一种简单的方法是使用负面的外观断言:
my $del = ","; # your csv delimiter
my $search = "U"; # the text you search for
while (<>) {
print if /(?<![^$del])$search(?![^$del])/;
}
(?<![^$del])
断言字符串前面的字符不是非分隔字符,同样(?![^$del])
断言后面的字符不是非分隔字符。双重否定看起来似乎很复杂,但好处是它们也匹配搜索字符串没有被任何一侧的分隔符包围的条件,即csv行的开头或结尾。
此处的菱形运算符将打开作为脚本参数给出的文件,并在while循环的每次迭代中读取其内容。 E.g:
perl mygrep.pl test.csv
这不是一个完整的解决方案,但它应该让你知道如何到达目的地。
答案 1 :(得分:0)
perl -lne 'print if(/\bU\b/)'' your_csv_file
测试如下:
> cat temp
info info US info cat
info info U info cow
info info info dog
info info U info dinosaur
info info info bat
phoenix.209> perl -lne 'print if(/\bU\b/)' temp
info info U info cow
info info U info dinosaur
或者您也可以在命令行上使用grep,如下所示
> grep -w U temp
info info U info cow
info info U info dinosaur