热,将分隔符放入“lsusb”的输出

时间:2015-02-10 04:41:47

标签: php linux bash sed lsusb

我有一个“lsusb”输出如下:

khalemi@hpx:/opt$ lsusb -d 0c2e:0200
Bus 002 Device 004: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
Bus 002 Device 006: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner

问:如何使用“sed”重新格式化输出(使用分隔符---)就像

Bus 002 Device 004: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
---
Bus 002 Device 006: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner

然后我会将此输出传递给另一个像php脚本的进程,并使用(---)分隔符将其拆分/拆分为数组。

请帮忙。

3 个答案:

答案 0 :(得分:2)

使用awk

lsusb -d 0c2e:0200 | awk 'NR>1{print "---\n" $0}'

使用sed

lsusb -d 0c2e:0200 | sed '1!s/^/---\n/'

在这两种情况下,代码的工作原理是在除第一行之外的每一行之前添加---\n

答案 1 :(得分:1)

在php中,你可以这样做

通过preg_split

$str = <<<EOT
Bus 002 Device 004: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
Bus 002 Device 006: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
EOT;
$split = preg_split('~\n~', $str);
print_r($split);

使用explode

$split = explode("\n", $str);

这会根据换行符分割输入。

<强>输出:

Array
(
    [0] => Bus 002 Device 004: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
    [1] => Bus 002 Device 006: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
)

答案 2 :(得分:0)

另一种方法

使用sed

lsusb -d 0c2e:0200|sed '$!{s/$/&\n---/g}'

<强>结果

Bus 002 Device 004: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner
---
Bus 002 Device 006: ID 0c2e:0200 Metrologic Instruments Metrologic Scanner