Regex 删除包含“";(无效)“;文本文件中的值
我想删除.txt文件中包含“(null)”的任何行。(null)值始终位于第3列。我想把这个添加到我已经有的脚本中 Txt文件示例:Regex 删除包含“";(无效)“;文本文件中的值,regex,awk,grep,Regex,Awk,Grep,我想删除.txt文件中包含“(null)”的任何行。(null)值始终位于第3列。我想把这个添加到我已经有的脚本中 Txt文件示例: 39|1411|XXYZ 40|1416|XXX 41|1420|(null) 在本例中,我想删除第三行。 我猜这是一个awk-F,但从那里不确定。您使用-F的方法是正确的 $ awk -F '|' '$3 != "(null)"' file.txt 39|1411|XXYZ 40|1416|XXX 将字段分隔符设置为|,然后打印第三个字段
39|1411|XXYZ
40|1416|XXX
41|1420|(null)
在本例中,我想删除第三行。
我猜这是一个awk-F,但从那里不确定。您使用
-F
的方法是正确的
$ awk -F '|' '$3 != "(null)"' file.txt
39|1411|XXYZ
40|1416|XXX
将字段分隔符设置为|
,然后打印第三个字段不等于(null)
的所有行。如果没有与模式关联的操作,则使用awk的默认值“打印行”
如果您放宽了专门测试第三个字段的要求,并且没有其他地方可以出现“(null)”子字符串,那么您可以使用
grep -vF '(null)' file.txt
您使用
-F
的方法是正确的
$ awk -F '|' '$3 != "(null)"' file.txt
39|1411|XXYZ
40|1416|XXX
将字段分隔符设置为|
,然后打印第三个字段不等于(null)
的所有行。如果没有与模式关联的操作,则使用awk的默认值“打印行”
如果您放宽了专门测试第三个字段的要求,并且没有其他地方可以出现“(null)”子字符串,那么您可以使用
grep -vF '(null)' file.txt
使用awk
:
awk '-F|' '$3 != "(null)"' < input-file
awk'-F |''3美元!=“(null)”<输入文件
与awk
:
awk '-F|' '$3 != "(null)"' < input-file
awk'-F |''3美元!=“(null)”<输入文件
使用grep
:
grep -v '|.*|(null)' in_file
perl -F'[|]' -lane 'print if $F[2] ne "(null)";' in_file
这里,使用选项-v
:打印不匹配的行
或使用Perl:
grep -v '|.*|(null)' in_file
perl -F'[|]' -lane 'print if $F[2] ne "(null)";' in_file
Perl one liner使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中。
-n
:一次循环输入一行,默认情况下将其分配给$。
-l
:在行内执行代码之前,先去掉输入行分隔符(“\n”
,默认情况下在*NIX上),然后在打印时将其追加。
-a
:在空格或-F
选项中指定的正则表达式上将$\ucode>拆分为数组@F
。
-F'[|]'
:在文本|
上拆分为@F
,而不是在空白处
另请参见:
使用grep
:
grep -v '|.*|(null)' in_file
perl -F'[|]' -lane 'print if $F[2] ne "(null)";' in_file
这里,使用选项-v
:打印不匹配的行
或使用Perl:
grep -v '|.*|(null)' in_file
perl -F'[|]' -lane 'print if $F[2] ne "(null)";' in_file
Perl one liner使用以下命令行标志:
-e
:告诉Perl在线查找代码,而不是在文件中。
-n
:一次循环输入一行,默认情况下将其分配给$。
-l
:在行内执行代码之前,先去掉输入行分隔符(“\n”
,默认情况下在*NIX上),然后在打印时将其追加。
-a
:在空格或-F
选项中指定的正则表达式上将$\ucode>拆分为数组@F
。
-F'[|]'
:在文本|
上拆分为@F
,而不是在空白处
另请参见:
这里有一个sed
:
$ sed '/(null)$/d' file
39|1411|XXYZ
40|1416|XXX
$
确保(null)
位于行的末尾。如果要确保(null)
是最后一列:
$ sed '/\|(null)$/d' file
如果您想特别确定它是第三列:
$ sed '/^[^|]*\|[^|]*\|(null)$/d' file
或使用grep
:
$ grep -v '^[^|]*|[^|]*|(null)$'
(但不是最后一个,只需使用awk
…)这里有一个sed
:
$ sed '/(null)$/d' file
39|1411|XXYZ
40|1416|XXX
$
确保(null)
位于行的末尾。如果要确保(null)
是最后一列:
$ sed '/\|(null)$/d' file
如果您想特别确定它是第三列:
$ sed '/^[^|]*\|[^|]*\|(null)$/d' file
或使用grep
:
$ grep -v '^[^|]*|[^|]*|(null)$'
(而不是最后一行,只需使用awk
…)我想删除.txt文件中包含“(null)”的任何行
如果您希望使用AWK
执行此操作,请使用file.txt
内容
39|1411|XXYZ
40|1416|XXX
41|1420|(null)
然后
将输出
39|1411|XXYZ
40|1416|XXX
说明:索引
返回子字符串第一次出现的位置((null)
,或者0如果找不到,我将否定返回的内容,从而得到0的真值和其他任何内容的假值,AWK将打印结果为真值的位置。我想删除.txt文件中包含“(null)”的任何行
如果您希望使用AWK
执行此操作,请使用file.txt
内容
39|1411|XXYZ
40|1416|XXX
41|1420|(null)
然后
将输出
39|1411|XXYZ
40|1416|XXX
说明:索引
返回子字符串第一次出现的位置((null)
,在这种情况下),如果找不到,则返回0,我否定返回值,因此得到0的真值和其他任何值的假值,AWK会打印结果为真值的地方。注意,perl模式的-p
不是POSIX grep选项。@EdMorton感谢您建议在不使用-p
选项的情况下使用grep
。更新了答案。更具体的是锚定:grep-v'^[^ |]*.[^ |]*.*|(null)$”
注意,perl模式的-P
不是POSIX grep选项。@埃德蒙顿感谢您建议在不使用-P
选项的情况下使用grep
。更新了答案。更具体的锚定:grep-v'^[^ |]*.[^ |]*.*(null)$”
谢谢。我选择了grep-vF'(null)'file.txt,因为它简洁。谢谢。我使用了grep-vF'(null)'file.txt,因为它简洁。