grep命令Binary file standard input matches

1、背景

使用grep查找文件时蹦出这个错误,

[root@localhost ~]#  lspci -vvv | grep -A50 "Ethernet controller" | grep -E "Capabilities|Ethernet controller"
Binary file (standard input) matches

这我表示一脸懵逼了,我明明grep的都是文本,怎么就出现Binary file了。

2、解决方案

经广大网友提示,可以通过grep的-a参数解决,

[root@localhost ~]#  lspci -vvv | grep -A50 "Ethernet controller" | grep -aE "Capabilities|Ethernet controller"
02:00.0 Ethernet controller: Mellanox Technologies MT26448 [ConnectX EN 10GigE, PCIe 2.0 5GT/s] (rev b0)
	Capabilities: [40] Power Management version 3
	Capabilities: [48] Vital Product Data
0c:00.0 Ethernet controller: Intel Corporation 82574L Gigabit Network Connection
	Capabilities: [c8] Power Management version 2
	Capabilities: [d0] MSI: Enable- Count=1/1 Maskable- 64bit+
	Capabilities: [e0] Express (v1) Endpoint, MSI 00
	Capabilities: [a0] MSI-X: Enable+ Count=5 Masked-
	Capabilities: [100 v1] Advanced Error Reporting
	Capabilities: [140 v1] Device Serial Number 04-7d-7b-ff-ff-61-62-d4

good,我们看下man手册里-a的解释,

       -a, --text
              Process a binary file as if it were text; this is equivalent to
              the --binary-files=text option.

也就是将二进制文件当做文本处理。

3、原因

那为什么明明我们操作的都是文本,却会出现二进制文件呢。

我们分解一下我们的命令,

[root@localhost ~]# lspci -vvv | grep -A50 "Ethernet controller" > a
[root@localhost ~]# file a
a: data

这下就清楚了,因为我们第一次grep的文本正好满足data文件类型的定义,导致系统认为这是一个data型文件,而不是regular文件类型,从而出现报错。

我们通过查看文件也可以发现一些端倪,

[^@^@] Unknown:
[^@^@] Unknown:
[^@^@] Unknown:
[^@^@] Unknown:

grep后的结果中有一些特殊字符,这些特殊字符就会被当做二进制文件处理。

删除这些特殊字符就OK了,

[root@localhost ~]# file a
a: ASCII text

ok,done!~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值