как обрезать вытереть вывод с помощью sed? - PullRequest
0 голосов
/ 12 января 2011

Я хочу обрезать вывод команды очистки с помощью sed.я пытаюсь использовать это:

wipe -vx7 /dev/sdb 2>&1 | sed -u 's/.*\ \([0-9]\+\).*/\1/g'

, но по какой-то причине это не работает.

, когда я использую echo & sed, чтобы напечатать вывод команды wipe, она работает!

echo "/dev/sdb: 10%" | sed -u 's/.*\ \([0-9]\+\).*/\1/g'

что я делаю не так?

Спасибо!

1 Ответ

1 голос
/ 12 января 2011

Это похоже на индикатор прогресса.Они часто выводятся напрямую в tty, а не в stdout или stderr.Вы можете использовать сценарий expect с именем unbuffer ( source ) или другой метод для создания псевдотерминала.Имейте в виду, что, вероятно, будет больше мусора, такого как \r и т. Д., Который вам может понадобиться отфильтровать.

Демонстрация:

$ cat foo
#!/bin/sh
echo hello > /dev/tty
$ a=$(./foo)
hello
$ echo $a

$ a=$(unbuffer ./foo)
$ echo $a
hello
...