이를위한 많은 도구가 있습니다 :
dd
파일을 차단하지 않으려는 경우 사용하려는 것입니다. 특정 횟수만큼만 특정 바이트 수만 읽으십시오. 파일 스트림 차단 및 차단 해제를 이식 가능하게 처리합니다.
tr -dc '[:graph:]' </dev/urandom |
dd bs=32 count=1 cbs=8 conv=unblock,sync 2>/dev/null
###OUTPUT###
UI(#Q5\e
BKX2?A:Z
RAxGm:qv
t!;/v!)N
또한 tr
ASCII 바이트를 다른 바이트로 변환 (또는이 경우 공백이 아닌 인쇄 가능한 문자가 아닌 ASCII 바이트 삭제)을 처리 할 수 있으므로 위 를 사용 합니다. 오늘 아침에 다른 질문 에 대한 답 으로 실제로 사용한 것은 다음 과 같습니다.
tr '>\n' '\n>' | sed 's/^>*//' | tr '\n>' '>\n'
비슷한 것이 많이 있습니다 . 이 목록은 가장 친숙한 공통 분모 하위 집합을 제공해야합니다.
그러나 2.5GB의 이진 파일에서 텍스트 처리를 수행하려는 경우로 시작할 수 있습니다 od
. 그것은 당신에게 octal dump
또는 다른 여러 형식을 줄 수 있습니다. 모든 종류의 옵션을 지정할 수 있지만 \C
이스케이프 된 형식으로 한 줄에 한 바이트 만 수행 합니다.
아래에서 볼 수 od
있듯이 데이터 는 사용자가 지정한 간격마다 규칙적입니다. 그러나 먼저 다음은 귀하의 질문에 대한 답변입니다.
printf 'first\nnewline\ttab spacefoobar\0null' |
od -A n -t c -v -w1 |
sed 's/^ \{1,3\}//;s/\\$/&&/;/ /bd
/\\[0nt]/!{H;$!d};{:d
x;s/\n//g}'
위의 작은 부분은 \n
ewline, \0
nulls, \t
abs 및 구분 기호 <spaces>
의 \C
이스케이프 된 문자열을 유지하면서 구분됩니다. 사용 된 H
및 x
기능에 유의하십시오 sed
. 구분 기호가 나타날 때마다 메모리 버퍼의 내용을 교체합니다. 이러한 방식으로 sed
파일을 안정적으로 분리하고 오버런을 버퍼링하지 않기 위해 필요한만큼의 정보 만 보유합니다. 즉, 실제로 분리 문자를 만나는 한 그렇지 않습니다. 그렇게하는 동안 sed
입력을 계속 처리 od
하고을 만나기 전까지 계속 입력 합니다 EOF
.
그대로 출력은 다음과 같습니다.
first
\nnewline
\ttab
spacefoobar
\0null
그래서 내가 원한다면 foobar
:
printf ... | od ... | sed ... |
sed 's/foobar/\
&\
/g'
###OUTPUT###
first
\nnewline
\ttab
space
foobar
\0null
이제 당신의 메이크업에 사용하려는 경우 C
꽤 쉽게 탈출 - 때문에 sed
이미 두 번이 \\
때문에 자사의 단일 입력 백 슬래시의 모든 탈출 백 슬래시, printf
에서 execed xargs
귀하의 사양에 출력을 생성 아무 문제가 없게됩니다. 그러나 xargs
쉘 따옴표를 먹으 므로 다시 큰 따옴표를 사용해야합니다.
printf 'nl\ntab\tspace foobarfoobar\0null' |
PIPELINE |
sed 's/./\\&/g' |
xargs printf %b |
cat -A
###OUTPUT###
nl$
tab^Ispace $
foobar$
$
foobar$
^@null%
쉘 변수에 쉽게 저장하고 나중에 동일한 방식으로 출력 할 수 있습니다. 마지막 sed
삽입\
은 입력의 모든 문자 앞에 백 슬래시를 합니다. 그게 전부입니다.
그리고 여기 sed
에 그것을 잡기 전에 모든 것이 보이는 것처럼 보입니다 .
printf 'nl\ntab\tspace foobarfoobar\0null' |
od -A n -t c -v -w1
n
l
\n
t
a
b
\t
s
p
a
c
e
f
o
o
b
a
r
f
o
o
b
a
r
\0
n
u
l
l
perl
하고python
있습니까?