Linux - 尾部为零的条线

Linux - Strip lines with zero at end

提问人:msknight 提问时间:10/29/2023 最后编辑:Timur Shtatlandmsknight 更新时间:10/30/2023 访问量:88

问:

我还有最后一个障碍要解决,但我的模式匹配还不能胜任这项任务。我有一份报告,我想去掉末尾带有 0 的行......例如。去除第一行,但将第二行保留在输出中。

例如,给定以下输入:

196 Reallocated_Event_Count 0x0032   100   100   000    Old_age   Always       -       0
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       22

预期输出为:

199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       22

我尝试了各种 sed 组合,例如:

sed 's/0$//' file

并且失败了,例如,上面生成的输出只缺少行尾的输出,而不是删除行。0

正则表达式 Linux 字符串 SED

评论

0赞 msknight 10/29/2023
我“想”我可能已经找到了......sed -n '/^.* 0$/!p' 也许吧?
0赞 shellter 10/29/2023
这是一种方式。在更大的文件上进行测试。更传统的方法是对前面的空格或制表符字符进行 alows(您也可以在 中使用)。祝你好运。grep '[[:space:]]0$' file[[:space:]]sed
0赞 Toby Speight 10/30/2023
/0$/d应该足够了,是吗?或者,如果您不想删除以 、 、 等结尾的行。/\b0$/d102030

答:

0赞 msknight 10/29/2023 #1

sed -n '/^.* 0$/!p'

...最终我到达了那里!

评论

2赞 jhnc 10/29/2023
或更少键入:sed '/ 0$/d'
0赞 Timur Shtatland 10/30/2023
你可以接受你自己(或其他任何人)的答案,如果它适合你。
0赞 Ed Morton 10/29/2023 #2

正则表达式并不总是最佳解决方案。请记住这句话

有些人在遇到问题时会想“我知道,我会用 正则表达式。现在他们有两个问题。

使用任何awk,我们可以测试每行的最后一个字段是否为非零,如果是,则打印该行:

$ awk '$NF' file
199 UDMA_CRC_Error_Count    0x000a   200   200   000    Old_age   Always       -       22
0赞 Timur Shtatland 10/30/2023 #3

用:grep

grep -Pv '\s0$' in_file > out_file

在这里,GNU grep 使用以下选项: :
使用 Perl 正则表达式。
:打印匹配的行。
-P-v

另请参阅: