提问人:msknight 提问时间:10/29/2023 最后编辑:Timur Shtatlandmsknight 更新时间:10/30/2023 访问量:88
Linux - 尾部为零的条线
Linux - Strip lines with zero at end
问:
我还有最后一个障碍要解决,但我的模式匹配还不能胜任这项任务。我有一份报告,我想去掉末尾带有 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
答:
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
另请参阅:
评论
grep '[[:space:]]0$' file
[[:space:]]
sed
/0$/d
应该足够了,是吗?或者,如果您不想删除以 、 、 等结尾的行。/\b0$/d
10
20
30