2011-01-12 4 views
0

나는 sed로 wipe 명령의 출력을 자르고 싶다. 나는이 하나를 사용하려고 :sed로 출력을 닦아내는 방법?

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

을하지만 어떤 이유로 작동하지 않습니다.

에코를 사용할 때 & 닦아내 기 명령의 출력을 인쇄 할 때 작동합니다!

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

내가 뭘 잘못하고있는 걸까요?

감사합니다.

답변

1

진행률 표시기와 비슷합니다. 그것들은 stdout이나 stderr 대신 tty에 직접 출력되는 경우가 많습니다. unbuffer (source)이라는 expect 스크립트 나 다른 방법을 사용하여 의사 tty를 만들 수 있습니다. 필터링해야 할 수도있는 \r 등과 같은 더 많은 쓰레기가있을 수 있습니다.

데모 :

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

$ a=$(unbuffer ./foo) 
$ echo $a 
hello 
관련 문제