의 경우 플래그를 cat
사용했지만 -A
이 문자의 의미를 어디서도 찾을 수 없습니다. 예를 들어:
cat /proc/cpuinfo > output
cat -A output
그 줄 중 하나는 다음과 같습니다.
processor^I: 7$
New Line이 무엇을 의미하는지 알지만 $
, 그게 무슨 ^I
뜻인가요?
무슨 뜻이에요 ^@
?
내 C 프로그램에서 제거할 수 있도록 어떤 유형의 공백 cpuinfo가 튀어나오는지 알아내려고 노력 중인데 이 작업을 수행하는 데 문제가 있습니다.
답변1
^I
^@
일반적인 "캐럿" 표기법을 사용합니다 .제어 문자. ^I
탭 문자인 문자 9인 ASCII 문자 control-I를 나타냅니다. ^@
C의 문자열 종결자인 문자 0인 ASCII 문자 control-@을 나타냅니다. 일반적인 형식은 대문자 또는 그 중 하나이며, 값이 마이너스 64인 바이트 값을 나타내고 바이트 값에 64를 더한 값인 127을 나타냅니다.^c
c
@[\]^_
c
^?
?
또 다른 덜 표준적인 표현이 있습니다 cat -A
. 비ASCII 바이트(즉, 128 이상의 바이트 값)가 다음과 같이 표시되고, M-
그 뒤에 값이 128보다 작은 바이트(즉, 상위 비트가 반전된 바이트 값)의 표현이 표시됩니다. .
cat -A
시각적으로 흐릿한 출력을 이해하는 가장 좋은 방법은 아닙니다. 16진수 성적표는 보다 정확한 정보를 제공합니다.
od -t x1 /proc/cpuinfo
hd /proc/cpuinfo
그러나 C 프로그램에서는 scanf
정보를 구문 분석하는 데 사용할 수 있습니다. 모든 ASCII 공백은 공백 scanf
이며 에 있는 파일의 경우 /proc
형식이 유효하다는 것을 알고 있습니다.
답변2
이 경우 ^
"control"은 "control"의 단축어로 사용됩니다. 따라서 ^A
ASCII 문자 1인 "control-A"를 의미합니다. ^I
표현 control-I
또는 ASCII 9라고도 합니다 TAB. ^@
따라서 ASCII 00 또는 NUL 문자입니다.
이러한 문자를 흔히 "제어 문자"라고 합니다.
; 이는 "메타" 를 M-
의미하며 가장 높은 비트가 설정되었음을 의미합니다(다음 문자의 ASCII 값에 128이 추가됨).
답변3
부록으로 문자와 제어 문자 사이의 관계가 다른 답변에서 완전히 명확하지 않습니다
이것ASCII 문자 집합다음과 같은 테이블에 표시될 수 있습니다.
NUL SP @ `
SOH ! A a
STX " B b
ETX # C c
EOT $ D d
ENQ % E e
ACK & F f
BEL ' G g
BS ( H h
HT ) I i
LF * J j
VT + K k
FF , L l
CR - M m
SO . N n
SI / O o
DL 0 P p
DC1 1 Q q
DC2 2 R r
DC3 3 S s
DC4 4 T t
NAK 5 U u
SYN 6 V v
ETB 7 W w
CAN 8 X x
EM 9 Y y
SUB : Z z
ESC ; [ {
FS < \ |
GS = ] }
RS > ^ ~
US ? _ DEL
아시다시피 TAB 라고 표시된 키보드 키를 눌러 TAB이라는 제어 문자를 문서에 삽입할 수 있습니다 TAB. CTRL키를 누른 상태에서 을 눌러도 동일한 효과를 얻을 수 있다는 것을 알 수도 있습니다 I. 이것제어 키태그는 CTRLASCII를 입력하는 방법으로 존재합니다.제어 문자.
위 표에서 볼 수 있듯이 "I" 문자는 HT(가로 탭, TAB) 문자와 같은 줄에 있습니다.
CTRL오늘날 우리는 이 문자를 + 로 쓸 수 있지만 I과거에는 약어로 사용하는 것이 더 일반적이었습니다.^I
표에서도 알 수 있듯이 "@"은 "NUL"과 같은 줄에 있으므로 ^@
널 문자 0x00인 NUL을 나타냅니다.
표의 배열은 이러한 ASCII 문자에 할당된 숫자 값("코드 포인트")을 보여 주며, 각 값은 0x40에 해당 제어 문자의 값을 더한 것입니다.
답변4
16진수 뷰어를 사용하세요:
% hexdump -C /proc/cpuinfo | sed -n /processor/p
00000000 70 72 6f 63 65 73 73 6f 72 09 3a 20 30 0a 76 65 |processor.: 0.ve|
00000340 74 3a 0a 0a 70 72 6f 63 65 73 73 6f 72 09 3a 20 |t:..processor.: |
%
ascii(7)
그런 다음 표 또는 유사한 표를 찾아 여기 09
또는 가로 탭에서 특정 코드를 찾으세요.