it-swarm-ko.tech

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

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

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'

긴 줄을 삭제합니다.

66
LanceBaynes

\b 또는 \r를 사용하여 cursor를 뒤로 이동 한 다음 인쇄 된 문자를 새 문자로 덮어 쓸 수 있습니다. \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.
57
lesmana

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

echo -e "\033[1K"

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

echo -e "\033[2K"

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

100
Kevin

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

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

이것은 xyzzyxyzzy를 쓴 다음 줄의 시작 부분으로 돌아가서 "줄 끝으로 지우기"순서를 터미널로 보낸 다음 foobar를 씁니다. -nfoobar 다음에 echo가 줄 바꿈을 추가하지 않도록합니다.

36
Arcege

echo을 (를) 명시 적으로 요청하지만이 요청으로 인해 문제가 해결됩니다. 괄호 확장과 함께 bash의 내장 printf 명령을 사용하는 접근 방식은 다음과 같습니다.

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

다음은 echo의 noline -n 캐리지 리턴 \r 옵션.

bash overwrite terminal line

#!/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"
7
Derek Soike

대신에 echo -en "\r" 또한 printf "\r" 유용한 명령입니다. 이 방법으로 문자열을 포맷 할 수 있습니다. 예 :

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

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

1
McPeppr

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

줄을 삭제하기 위해 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"
0
Praveen Kumar BS