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에 개행 문자를 포함하거나 -n
echo가 자동으로 개행 문자를 인쇄하도록 스위치를 제거하면 다음과 같은 결과가 나타납니다.
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'