У меня есть вывод «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-скрипту, и разнесу / разделю его, используя (—) разделитель в массив.
пожалуйста помоги.
В 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
)
С помощью awk
:
lsusb -d 0c2e:0200 | awk 'NR>1{print "---\n" $0}'
С помощью sed
:
lsusb -d 0c2e:0200 | sed '1!s/^/---\n/'
В обоих случаях код работает путем добавления ---\n
перед каждой строкой, кроме первой.
другой подход
используя сед
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