Terminal 仅从grep-n中取出前两个值

Terminal 仅从grep-n中取出前两个值,terminal,grep,Terminal,Grep,因此,我使用lsusb | grep-n-Eo'[0-9]{1,3}'来过滤终端中的命令数据。问题是,我想对它进行更多的过滤,得到代表USB总线和设备号的两个特定行。 例如,这里有一个输出(在这里,我想从第1行得到002和001,从第2行得到001和003): 谁能告诉我怎么做?另外,如果您有任何更简单的方法可以使用lsusb从终端获取总线值和设备号,我愿意接受建议 lsusb: lsusb: 在这里,awk可能比grep更好 lsusb | awk '{print $2" &quo

因此,我使用
lsusb | grep-n-Eo'[0-9]{1,3}'
来过滤终端中的命令数据。问题是,我想对它进行更多的过滤,得到代表USB总线和设备号的两个特定行。 例如,这里有一个输出(在这里,我想从第1行得到002和001,从第2行得到001和003):

谁能告诉我怎么做?另外,如果您有任何更简单的方法可以使用
lsusb
从终端获取总线值和设备号,我愿意接受建议

lsusb: lsusb:


在这里,awk可能比grep更好

 lsusb | awk '{print $2" "substr($4, 1, length($4)-1)}'

使用
GNU grep
,您只能获得遵循
总线
设备
的数字:

grep-noP'(总线设备)\K\d+'
我想要一号线的002和001,二号线的001和003

对此不是很清楚,但如果您只希望前两行匹配,可以使用:

grep-m2-noP'(总线设备)\K\d+'

sed会比grep更好吗?或者也许awk,事实上,是的,awk是一个明显的选择,但我们需要看到OP的预期输出做出一些假设,但完全同意预期输出会有所帮助。或者
lssub | awk-F'[:[:blank:]+'{print$2,$4}'
Bus 002 Device 001: ID 2b1d:2341 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 31d3:3125 IMC Networks 
Bus 001 Device 002: ID 31d3:67c1 IMC Networks 
Bus 001 Device 004: ID 1245:1222 SteelSeries ApS 
Bus 001 Device 001: ID 1315:3232 Linux Foundation 2.0 root hub
 lsusb | awk '{print $2" "substr($4, 1, length($4)-1)}'