Wiem, że mogłem usunąć ostatnie trzy znaki za pomocą:
echo -ne '\b\b\b'
Ale jak mogę usunąć pełną linię? Mam na myśli, że nie chcę używać:
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'
... itd. ... aby usunąć długą linię.
command-line
echo
LanceBaynes
źródło
źródło
echo -ne "\033[2K" ; printf "\r"
teraz linia jest jak nowa, jakby nigdy wcześniej nie była napisana.echo -ne "\e[2K\r"
. Niemniej jednak sekwencje specjalne ANSI FTW.Odpowiedzi:
Możesz użyć
\b
lub,\r
aby przesunąć kursor do tyłu, a następnie zastąpić wydrukowany znak nowym znakiem. Pamiętaj, że ani\b
nie\r
usuwa drukowanych znaków. Po prostu przesuwa kursor do tyłu.\b
przesuwa kursor o jeden znak wstecz i\r
przesuwa kursor na początek linii.Przykład: oba
i
wydrukuje:
Jeśli chcesz usunąć znaki, musisz zastosować następujące obejście:
wynik:
Fragment
man echo
:źródło
echo -e 'fooooooooo\rbar
echo barooooooo.echo -e 'foooo\b\b\b\b\b\b\b\b\b\bbar'
także echobaroo
.printf
.Szukasz ucieczek terminalnych . W szczególności, aby wyczyścić od pozycji kursora do początku linii:
Lub wszystko w linii, niezależnie od pozycji kursora:
Możesz także wykonywać różnego rodzaju inne sztuczki, korzystając z ucieczek terminalu.
źródło
-e
ponieważecho
argument nie jest zgodny z POSIX + Nie podoba mi się sekwencja ucieczki. Wolęprintf
albotput
.-e
parametrecho
nie jest zgodny z POSIX, ale nadal ...Jeśli chcesz wyczyścić linię, sugeruję użyć kombinacji zwrotu karetki, o którym wspominają ludzie i terminfo.
Spowoduje to zapis
xyzzyxyzzy
, następnie powrót do początku linii i wysłanie sekwencji „wyczyść do końca linii” do terminala, a następnie zapisfoobar
. Te-n
marki nie echo dodać przełamane pofoobar
.źródło
printf '%s\r%s%s' xyzzyxyzzy "$ceol" foobar
pod względem przenośności i uniknięcia treści$ceol
przechodzących przez\x
rozszerzenie.Ty wyraźnie o to prosisz
echo
, ale ta prośba Cię przygnębia. Oto podejście wykorzystujące wbudowaneprintf
polecenie bash z rozszerzaniem nawiasów:źródło
Oto przykład użycia echa bez opcji nowego wiersza
-n
i powrotu karetki\r
.źródło
Zamiast tego
echo -en "\r"
możesz też uznać toprintf "\r"
polecenie za przydatne. W ten sposób możesz sformatować ciąg. na przykład:Zwykle robię to również podczas pracy z powolnym analizowaniem plików, aby wyświetlić aktualnie trwającą nazwę pliku bez tworzenia listy
źródło
Jako pytanie należy usunąć cały wiersz
Użyłem poniżej polecenia z kombinacją
echo
ised
do usunięcia wierszaPo wykonaniu polecenia wynik będzie pusty. Póki linia nie zostanie zastąpiona żadną
Komenda
źródło
Oto przykład licznika, którego używam:
źródło