에코로 줄을 삭제하는 방법은 무엇입니까?

에코로 줄을 삭제하는 방법은 무엇입니까?

마지막 세 문자를 제거할 수 있다는 것을 알고 있습니다.

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'

...잠깐...긴 줄을 제거하세요.

답변1

당신이 찾고있는터미널 탈출. 특히 커서 위치부터 줄 시작 부분까지 내용을 지우려면 다음을 수행하세요.

echo -e "\033[1K"

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

echo -e "\033[2K"

터미널 이스케이프를 사용하여 다양한 기타 깔끔한 작업을 수행할 수도 있습니다.

답변2

사용하거나 이동할 수 \b있습니다 \r.커서반환한 다음 인쇄된 문자를 새 문자로 덮어씁니다.

인쇄 된 문자는 제거 \b되거나 삭제되지 않습니다. \r커서를 뒤로 이동시키는 것뿐입니다. \b커서를 한 문자 뒤로 이동하고 \r줄의 시작 부분으로 이동합니다.

예:

echo -e 'fooooo\b\b\b\bbar

인쇄할 것이다

fobaro

하지만

echo -e 'fooooo\rbar'

다음을 인쇄합니다:

barooo

이전 문자를 "제거"하려면 다음 해결 방법을 사용할 수 있습니다.

echo -e 'fooooo\r      \rbar'

또는

echo -e 'fooooo\rbar   '

(열 뒤의 공백에 유의하세요)

산출:

bar   

이제 섹션 뒤에 공백이 있습니다.

강조 표시된 공백 출력

bar
   ^^^ spaces

대부분의 사용 사례에서는 이는 중요하지 않습니다. 그러나 예를 들어 배경색을 수정하면 공백이 나타납니다.


발췌 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.

답변3

줄을 지우고 싶다면 사람들이 언급한 캐리지 리턴과 용어 정보 조합을 ​​사용하는 것이 좋습니다.

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

이렇게 하면 를 쓴 xyzzyxyzzy다음 줄의 시작 부분으로 돌아가서 "줄 끝까지 지우기" 시퀀스를 터미널에 보낸 다음 를 씁니다 foobar. -n뒤에 개행 문자를 추가하지 않고 에코를 비활성화합니다 foobar.

답변4

당신은 분명한 요청을 했지만 echo이 요청으로 인해 당신은 무기력해졌습니다. printfbash 내장 및 중괄호 확장을 사용하여 이를 수행하는 방법은 다음과 같습니다 .

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

관련 정보