[unix] 에코가있는 줄을 삭제하는 방법?

마지막 세 문자를 삭제할 수 있음을 알고 있습니다.

echo -ne '\b\b\b'

그러나 전체 줄을 어떻게 삭제할 수 있습니까? 나는 사용하고 싶지 않다는 것을 의미한다.

echo -ne '\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b'

긴 줄을 삭제합니다.



답변

\b또는 \r을 사용 하여 커서를 뒤로 이동 한 다음 인쇄 된 문자를 새 문자로 덮어 쓸 수 있습니다 . 인쇄 된 문자를 삭제 \b하거나 \r삭제 하지 않습니다 . 커서를 뒤로 이동시킵니다. \b커서를 한 문자 뒤로 \r이동하고 커서를 줄의 시작 부분으로 이동합니다.

예 : 둘 다

echo -e 'foooo\b\b\b\b\bbar'

echo -e 'foooo\rbar'

인쇄합니다 :

baroo

문자를 삭제하려면 다음 해결 방법을 사용해야합니다.

echo -e 'fooooo\r     \rbar'

산출:

bar

발췌 man echo:

   If -e is in effect, the following sequences are recognized:

   \0NNN  the character whose ASCII code is NNN (octal)

   \\     backslash

   \a     alert (BEL)

   \b     backspace

   \c     produce no further output

   \f     form feed

   \n     new line

   \r     carriage return

   \t     horizontal tab

   \v     vertical tab

   NOTE: your shell may have its own version of echo, which usually super‐
   sedes the version described here.  Please refer to your  shell's  docu‐
   mentation for details about the options it supports.


답변

당신은 터미널 탈출을 찾고 있습니다. 특히 커서 위치에서 줄의 시작 부분을 지우려면 다음을 수행하십시오.

echo -e "\033[1K"

또는 커서 위치에 관계없이 줄의 모든 것 :

echo -e "\033[2K"

또한 터미널 이스케이프를 사용하여 모든 종류의 깔끔한 트릭을 수행 할 수 있습니다.


답변

줄을 지우려면 사람들이 언급 한 운송 정보와 terminfo의 조합을 사용하는 것이 좋습니다.

# terminfo clr_eol
ceol=$(tput el)
echo -ne "xyzzyxyzzy\r${ceol}foobar"

이것은을 쓴 xyzzyxyzzy다음 줄의 시작 부분으로 돌아가서 “줄의 끝을 지운다”순서를 터미널에 보낸 다음 씁니다 foobar. -n차종은 후 줄 바꿈을 추가하지 에코 foobar.


답변

명시 적으로을 echo요청하지만이 요청으로 핀을 고정시킵니다. printf괄호 확장과 함께 bash의 내장 명령 을 사용하는 접근 방식은 다음과 같습니다 .

printf 'fooooooooo' # 10 characters
printf '\r'; printf ' %0.s' {0..9} # 10 expansions of the space character


답변

다음은 echo의 no newline -n캐리지 리턴 \r 옵션을 사용하는 예 입니다.

bash 덮어 쓰기 터미널 라인

#!/bin/bash

CHECK_MARK="\033[0;32m\xE2\x9C\x94\033[0m"

echo -e "\n\e[4mDoing Things\e[0m"
echo -n "doing thing 1..."
sleep 1
echo -e "\\r${CHECK_MARK} thing 1 done"


답변

대신 명령이 유용하다고 echo -en "\r"생각 될 수도 있습니다 printf "\r". 이 방법으로 문자열을 포맷 할 수 있습니다. 예 :

for sec in {1..100}; do printf "\r %04d" ${sec}; sleep 0.1; done

느린 파일 구문 분석으로 작업 할 때 목록을 작성하지 않고 현재 진행중인 파일 이름을 표시 할 때도 그렇게합니다.


답변

질문으로 전체 줄을 삭제하십시오

나는의 조합으로 명령 아래 사용하고 있습니다 echosed라인을 삭제하는

명령이 실행 된 후 라인이 none으로 바뀌는 동안 비어 있습니다.

명령

echo  "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b" | sed -r "s/.*//g"