Regex 删除包含“";(无效)“;文本文件中的值

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 将字段分隔符设置为|,然后打印第三个字段

我想删除.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
将字段分隔符设置为
|
,然后打印第三个字段不等于
(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,因为它简洁。