터미널 창에 탭 문자(ASCII hex 0x09)를 어떻게 출력하나요?
모든 실험에서 탭 문자는 터미널에 나타날 때 공백으로 변경됩니다. 예를 들어
$ echo -e "xx\t\tyy"
xx yy
xx
yy
와 사이의 공백이 탭 2개가 아닌 14개의 공백으로 채워지기 때문에 이는 제가 원하는 것이 아닙니다 . stty tab0
, stty tab1
, , 를 stty tab2
시도 했지만 stty tab3
모두 동일한 결과를 얻었습니다.
저는 GNOME Terminal 2.16.0과 Red Hat Enterprise Linux 클라이언트 버전 5.9를 사용하고 있습니다.
배경: 터미널에서 마우스로 텍스트를 선택하여 Excel에 붙여넣고 싶습니다. Emacs(필드 사이에 0x09 탭 사용)에서 이 작업을 수행하면 필드가 다른 열에 표시됩니다. 나는 이것을 좋아하고 터미널에서 복사하여 붙여 넣을 때 동일한 동작을 원합니다. 그러나 현재 모든 필드는 첫 번째 열의 문자열로 끝납니다. Emacs의 필드 사이에 공백(0x20)이 있으면 터미널에서 복사하여 붙여넣을 때와 동작이 동일합니다.
답변1
탭 문자는 인쇄 가능한 문자가 아닙니다. Tab은 일반적으로 커서를 앞으로 이동시키는 제어 문자입니다(단, 줄의 끝은 아님). 건너뛴 문자는 변경되지 않습니다.
gnome-terminal
(및 vte
이를 기반으로 하는 다른 에뮬레이터에는) 복사-붙여넣기를 위해 탭을 보존하려고 시도하는 특별한 트릭이 있지만 소프트 랩에서는 여전히 탭이 손실됩니다. 다른 에뮬레이터에도 이러한 해킹 기능이 있을 수 있지만 일반적으로 그렇지 않습니다.
답변2
당신이 사용하는 경우
printf "xx\t\tyy"
실제 탭 문자로 확장되어야 합니다. echo
About의 행동 bash
이 이상했습니다. Debian 7에서 테스트 한 bash
결과 탭 echo -t
도 탭도 제공되지 않았지만 탭은 제공되었습니다(확인하기 위해 출력을 파일로 리디렉션함). 스크립트는 다음과 같습니다./bin/echo -t
printf
#!/bin/bash
echo -t "xx\t\tyy"
echo done
/bin/echo -t "xx\t\tyy"
echo done
echo "xx\t\tyy"
echo done
/bin/echo "xx\t\tyy"
echo done
printf "xx\t\tyy"
echo done
그리고 출력도착하다단말기:
-t xx\t\tyy
done
-t xx\t\tyy
done
xx\t\tyy
done
xx\t\tyy
done
xx yydone
이는 캐릭터 배치의 추가 문제와는 다릅니다.존재하다터미널 화면. 일반적으로 대부분의 터미널에는공간잘라내기/붙여넣기 옵션(인쇄된 라벨 포함 또는 제외) 그런 이유로 -
답변3
주제에서 약간 벗어났지만 출력을 클립보드에 넣어 Excel에 붙여넣고 싶다면 xclip과 같은 도구를 사용해 볼 수 있습니다. 설치해야 할 수도 있습니다. xclip을 사용하면 다음과 같은 내용을 작성할 수 있습니다.
echo -e "xx\t\tyy" | xclip -selection c
이제 클립보드에 저장되어 Excel에 붙여넣을 수 있습니다. echo가 작동하지 않으면 printf를 시도해 볼 수 있습니다.
매번 모든 내용을 입력하고 싶지 않다면 별칭을 만들 수 있습니다.
alias xclip="xclip -selection c"
echo -e "xx\t\tyy" | xclip
다른 방법이 없다면 언제든지 원하는 출력을 파일로 리디렉션한 다음 텍스트 편집기에서 열고 필요한 내용을 복사할 수 있습니다. 탭은 파일에서 탭으로 유지되어야 하기 때문입니다.
echo -e "xx\t\tyy" > tmpfile.txt