Горячая установка разделителя в выводе «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

Q) Как я могу использовать «sed», чтобы переформатировать вывод (используя разделитель —), чтобы быть похожим

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

Затем я передам этот вывод другому процессу, например php-скрипту, и разнесу / разделю его, используя (—) разделитель в массив.

пожалуйста помоги.

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
)
1

Другие решения

С помощью awk:

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

С помощью sed:

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

В обоих случаях код работает путем добавления ---\n перед каждой строкой, кроме первой.

2

другой подход

используя сед

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
0
По вопросам рекламы [email protected]