匹配确切的字段

时间:2014-04-14 14:46:19

标签: arrays regex perl

我有一个问题。

我正在使用非常大的列表数据,我需要省略某个字段中的任何内容,其数量正好为' 0'。我的问题是,您显然会明白为什么,我是否也会忽略包含'0'的其他内容,即100, 101,几乎任何包含0的内容以及确切的值0

示例表:

ID   Name  Food   quantity   price
1   Josh   hotdog   1   5.00
2   Josh   hotdog   100   5.0
3   Josh   hotdog   101   5.00
4   Josh   hotdog   0   5.00
5   Josh   hotdog   1   5.00

我想省略的行包含'ID'个数字'4'。我不需要任何数量为0的行。 我使用的代码是一个命令提示符,我应用于批处理文件。它看起来像这样。

perl i.bak -aF\t -ne "print if $F[3] =~ "/[0]/" file.txt.

现在我知道这不起作用,因为字符类随机化'0'。换句话说,它是"如果"有一个' 0' 0在那个领域的任何地方打印它(或者#34;除非",我有#34;如果"这次在我的一个班轮上看到结果)。

只是寻找'0'的完全匹配,并想知道我使用的方法是否可行。

2 个答案:

答案 0 :(得分:0)

更改

perl i.bak -aF\t -ne "print if $F[3] =~ "/[0]/" file.txt.

perl i.bak -aF\t -ne 'print if $F[3] ne "0"' file.txt

perl i.bak -aF\t -ne 'print if $F[3] != 0' file.txt

perl i.bak -aF\t -ne 'print if $F[3] !~ m/^0$/' file.txt

再试一次。

如果$F[3] =~ /[0]/包含字符$F[3],则0将为真。

答案 1 :(得分:0)

我认为你不需要正则表达式,最简单的方法是

perl i.bak -aF\t -ne "print if $F[3] ne q{0} " file.txt

Output:
ID      Name    Food    quantity        price
1       Josh    hotdog  1       5.00
2       Josh    hotdog  100     5.0
3       Josh    hotdog  101     5.00
5       Josh    hotdog  1       5.00

编辑:如果您想使用正则表达式,那么您需要剪切不在标签上的新行

perl i.bak -aF\n -ne "print if $F[0] !~ /\s+0\s*/" file.txt

perl i.bak -aF\n -ne "print unless $F[0] =~ /\s+0\s*/" file.txt

Output:
ID      Name    Food    quantity        price
1       Josh    hotdog  1       5.00
2       Josh    hotdog  100     5.0
3       Josh    hotdog  101     5.00
5       Josh    hotdog  1       5.00