我有一个问题。
我正在使用非常大的列表数据,我需要省略某个字段中的任何内容,其数量正好为' 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'
的完全匹配,并想知道我使用的方法是否可行。
答案 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