인쇄 후 Unix 셸의 줄 덮어쓰기

인쇄 후 Unix 셸의 줄 덮어쓰기

Unix 쉘에서 인쇄한 후 줄을 수정하는 방법. 아래와 같이 행을 삭제하고 \r다시 쓸 수 있는데 어떻게 기존 행을 완전히 삭제하지 않고 덮어쓰고 아래와 같이 예상되는 출력을 얻을 수 있습니까?

주문하다:

printf "12345";printf "\r67";

산출:

67

예상 출력

67345

답변1

의견에서 논의한 것처럼 문제는 커서를 놓는 위치입니다. 예를 들어:

goldilocks@home> echo -n 1234; echo -ne "\r56"
56goldilocks@home>

첫 번째는 echo"1234"를 쓴 다음 두 번째는 줄의 시작 부분으로 다시 에코되어 "56"을 인쇄하고 종료됩니다. 커서는 6 뒤에 머무르고 다음으로 쉘은 명령 프롬프트를 인쇄하여 "34"를 덮어씁니다. 두 번째 echo에 개행 문자를 포함하거나 -necho가 자동으로 개행 문자를 인쇄하도록 스위치를 제거하면 다음과 같은 결과가 나타납니다.

goldilocks@home> echo -n 1234; echo -e "\r56"
5634
goldilocks@home>

커서가 "34"를 남기고 한 줄 아래로 이동합니다.

답변2

고급 sed 표현식을 사용하여 이 작업을 수행할 수 있습니다.

printf '%s\n' {1..5} | sed '/1/,/2/{ s/1/6/;s/2/7/;s/\([^\n]*\)\(\n\)\(.*\)/\3\2\1/; }' | tr '\n' ' '

사용awk

printf '%s' {1..5} | awk '{gsub(/12/,"67"); print}'

사용tr

printf '%s' {1..5} | tr '12' '67'

관련 정보