16진수 문자를 일반 문자로 변환하는 방법은 무엇입니까?

16진수 문자를 일반 문자로 변환하는 방법은 무엇입니까?

나는 이것을 시도했지만 "sed"를 "탈출"하는 데 멈췄습니다.

sed -i 's/\\x0/NUL/g' $1
sed -i 's/\\x1/SOH/g' $1
sed -i 's/\\x2/STX/g' $1
sed -i 's/\\x3/ETX/g' $1
sed -i 's/\\x4/EOT/g' $1
sed -i 's/\\x5/ENQ/g' $1
sed -i 's/\\x6/ACK/g' $1
sed -i 's/\\x7/BEL/g' $1
sed -i 's/\\x8/BS/g' $1
sed -i 's/\\x9/HT/g' $1
sed -i 's/\\x0A/LF/g' $1
sed -i 's/\\x0B/VT/g' $1
sed -i 's/\\x0C/FF/g' $1
sed -i 's/\\x0D/CR/g' $1
sed -i 's/\\x0E/SO/g' $1
sed -i 's/\\x0F/SI/g' $1
sed -i 's/\\x10/DLE/g' $1
sed -i 's/\\x11/DC1/g' $1
sed -i 's/\\x12/DC2/g' $1
sed -i 's/\\x13/DC3/g' $1
sed -i 's/\\x14/DC4/g' $1
sed -i 's/\\x15/NAK/g' $1
sed -i 's/\\x16/SYN/g' $1
sed -i 's/\\x17/ETB/g' $1
sed -i 's/\\x18/CAN/g' $1
sed -i 's/\\x19/EM/g' $1
sed -i 's/\\x1A/SUB/g' $1
sed -i 's/\\x1B/ESC/g' $1
sed -i 's/\\x1C/FS/g' $1
sed -i 's/\\x1D/GS/g' $1
sed -i 's/\\x1E/RS/g' $1
sed -i 's/\\x1F/US/g' $1
sed -i 's/\\x20//g' $1
sed -i 's/\\x21/!/g' $1
sed -i 's/\\x22/"/g' $1
sed -i 's/\\x23/#/g' $1
sed -i 's/\\x24/$/g' $1
sed -i 's/\\x25/%/g' $1
sed -i 's/\\x26/&/g' $1
sed -i 's/\\x27'/g' $1
sed -i 's/\\x28/(/g' $1
sed -i 's/\\x29/)/g' $1
sed -i 's/\\x2A/*/g' $1
sed -i 's/\\x2B/0/g' $1
sed -i 's/\\x2C/,/g' $1
sed -i 's/\\x2D/0/g' $1
sed -i 's/\\x2E/0/g' $1
sed -i 's/\\x2F///g' $1
sed -i 's/\\x30/0/g' $1
sed -i 's/\\x31/1/g' $1
sed -i 's/\\x32/2/g' $1
sed -i 's/\\x33/3/g' $1
sed -i 's/\\x34/4/g' $1
sed -i 's/\\x35/5/g' $1
sed -i 's/\\x36/6/g' $1
sed -i 's/\\x37/7/g' $1
sed -i 's/\\x38/8/g' $1
sed -i 's/\\x39/9/g' $1
sed -i 's/\\x3A/:/g' $1
sed -i 's/\\x3B/;/g' $1
sed -i 's/\\x3C/</g' $1
sed -i 's/\\x3D/=/g' $1
sed -i 's/\\x3E/>/g' $1
sed -i 's/\\x3F/?/g' $1
sed -i 's/\\x40/@/g' $1
sed -i 's/\\x41/A/g' $1
sed -i 's/\\x42/B/g' $1
sed -i 's/\\x43/C/g' $1
sed -i 's/\\x44/D/g' $1
sed -i 's/\\x45/E/g' $1
sed -i 's/\\x46/F/g' $1
sed -i 's/\\x47/G/g' $1
sed -i 's/\\x48/H/g' $1
sed -i 's/\\x49/I/g' $1
sed -i 's/\\x4A/J/g' $1
sed -i 's/\\x4B/K/g' $1
sed -i 's/\\x4C/L/g' $1
sed -i 's/\\x4D/M/g' $1
sed -i 's/\\x4E/N/g' $1
sed -i 's/\\x4F/O/g' $1
sed -i 's/\\x50/P/g' $1
sed -i 's/\\x51/Q/g' $1
sed -i 's/\\x52/R/g' $1
sed -i 's/\\x53/S/g' $1
sed -i 's/\\x54/T/g' $1
sed -i 's/\\x55/U/g' $1
sed -i 's/\\x56/V/g' $1
sed -i 's/\\x57/W/g' $1
sed -i 's/\\x58/X/g' $1
sed -i 's/\\x59/Y/g' $1
sed -i 's/\\x5A/Z/g' $1
sed -i 's/\\x5B/[/g' $1
sed -i 's/\\x5C/\/g' $1
sed -i 's/\\x5D/]/g' $1
sed -i 's/\\x5E/^/g' $1
sed -i 's/\\x5F/_/g' $1
sed -i 's/\\x60/`/g' $1
sed -i 's/\\x61/a/g' $1
sed -i 's/\\x62/b/g' $1
sed -i 's/\\x63/c/g' $1
sed -i 's/\\x64/d/g' $1
sed -i 's/\\x65/e/g' $1
sed -i 's/\\x66/f/g' $1
sed -i 's/\\x67/g/g' $1
sed -i 's/\\x68/h/g' $1
sed -i 's/\\x69/i/g' $1
sed -i 's/\\x6A/j/g' $1
sed -i 's/\\x6B/k/g' $1
sed -i 's/\\x6C/l/g' $1
sed -i 's/\\x6D/m/g' $1
sed -i 's/\\x6E/n/g' $1
sed -i 's/\\x6F/o/g' $1
sed -i 's/\\x70/p/g' $1
sed -i 's/\\x71/q/g' $1
sed -i 's/\\x72/r/g' $1
sed -i 's/\\x73/s/g' $1
sed -i 's/\\x74/t/g' $1
sed -i 's/\\x75/u/g' $1
sed -i 's/\\x76/v/g' $1
sed -i 's/\\x77/w/g' $1
sed -i 's/\\x78/x/g' $1
sed -i 's/\\x79/y/g' $1
sed -i 's/\\x7A/z/g' $1
sed -i 's/\\x7B/{/g' $1
sed -i 's/\\x7C/|/g' $1
sed -i 's/\\x7D/}/g' $1
sed -i 's/\\x7E/~/g' $1
sed -i 's/\\x7F//g' $1
sed -i 's/\\x80/€/g' $1
sed -i 's/\\x81//g' $1
sed -i 's/\\x82/‚/g' $1
sed -i 's/\\x83/ƒ/g' $1
sed -i 's/\\x84/„/g' $1
sed -i 's/\\x85/…/g' $1
sed -i 's/\\x86/†/g' $1
sed -i 's/\\x87/‡/g' $1
sed -i 's/\\x88/ˆ/g' $1
sed -i 's/\\x89/‰/g' $1
sed -i 's/\\x8A/Š/g' $1
sed -i 's/\\x8B/‹/g' $1
sed -i 's/\\x8C/Œ/g' $1
sed -i 's/\\x8D//g' $1
sed -i 's/\\x8E/Ž/g' $1
sed -i 's/\\x8F//g' $1
sed -i 's/\\x90//g' $1
sed -i 's/\\x91/‘/g' $1
sed -i 's/\\x92/’/g' $1
sed -i 's/\\x93/“/g' $1
sed -i 's/\\x94/”/g' $1
sed -i 's/\\x95/•/g' $1
sed -i 's/\\x96/–/g' $1
sed -i 's/\\x97/—/g' $1
sed -i 's/\\x98/˜/g' $1
sed -i 's/\\x99/™/g' $1
sed -i 's/\\x9A/š/g' $1
sed -i 's/\\x9B/›/g' $1
sed -i 's/\\x9C/œ/g' $1
sed -i 's/\\x9D//g' $1
sed -i 's/\\x9E/ž/g' $1
sed -i 's/\\x9F/Ÿ/g' $1
sed -i 's/\\xA0//g' $1
sed -i 's/\\xA1/¡/g' $1
sed -i 's/\\xA2/¢/g' $1
sed -i 's/\\xA3/£/g' $1
sed -i 's/\\xA4/¤/g' $1
sed -i 's/\\xA5/¥/g' $1
sed -i 's/\\xA6/¦/g' $1
sed -i 's/\\xA7/§/g' $1
sed -i 's/\\xA8/¨/g' $1
sed -i 's/\\xA9/©/g' $1
sed -i 's/\\xAA/ª/g' $1
sed -i 's/\\xAB/«/g' $1
sed -i 's/\\xAC/¬/g' $1
sed -i 's/\\xAD//g' $1
sed -i 's/\\xAE/®/g' $1
sed -i 's/\\xAF/¯/g' $1
sed -i 's/\\xB0/°/g' $1
sed -i 's/\\xB1/±/g' $1
sed -i 's/\\xB2/²/g' $1
sed -i 's/\\xB3/³/g' $1
sed -i 's/\\xB4/´/g' $1
sed -i 's/\\xB5/µ/g' $1
sed -i 's/\\xB6/¶/g' $1
sed -i 's/\\xB7/·/g' $1
sed -i 's/\\xB8/¸/g' $1
sed -i 's/\\xB9/¹/g' $1
sed -i 's/\\xBA/º/g' $1
sed -i 's/\\xBB/»/g' $1
sed -i 's/\\xBC/¼/g' $1
sed -i 's/\\xBD/½/g' $1
sed -i 's/\\xBE/¾/g' $1
sed -i 's/\\xBF/¿/g' $1
sed -i 's/\\xC0/À/g' $1
sed -i 's/\\xC1/A/g' $1
sed -i 's/\\xC2/Â/g' $1
sed -i 's/\\xC3/Ã/g' $1
sed -i 's/\\xC4/Ä/g' $1
sed -i 's/\\xC5/Å/g' $1
sed -i 's/\\xC6/Æ/g' $1
sed -i 's/\\xC7/Ç/g' $1
sed -i 's/\\xC8/È/g' $1
sed -i 's/\\xC9/E/g' $1
sed -i 's/\\xCA/Ê/g' $1
sed -i 's/\\xCB/Ë/g' $1
sed -i 's/\\xCC/Ì/g' $1
sed -i 's/\\xCD/I/g' $1
sed -i 's/\\xCE/Î/g' $1
sed -i 's/\\xCF/Ï/g' $1
sed -i 's/\\xD0/Ð/g' $1
sed -i 's/\\xD1/Ñ/g' $1
sed -i 's/\\xD2/Ò/g' $1
sed -i 's/\\xD3/O/g' $1
sed -i 's/\\xD4/Ô/g' $1
sed -i 's/\\xD5/Õ/g' $1
sed -i 's/\\xD6/O/g' $1
sed -i 's/\\xD7/×/g' $1
sed -i 's/\\xD8/Ø/g' $1
sed -i 's/\\xD9/Ù/g' $1
sed -i 's/\\xDA/U/g' $1
sed -i 's/\\xDB/Û/g' $1
sed -i 's/\\xDC/U/g' $1
sed -i 's/\\xDD/Ý/g' $1
sed -i 's/\\xDE/Þ/g' $1
sed -i 's/\\xDF/ß/g' $1
sed -i 's/\\xE0/à/g' $1
sed -i 's/\\xE1/a/g' $1
sed -i 's/\\xE2/â/g' $1
sed -i 's/\\xE3/ã/g' $1
sed -i 's/\\xE4/ä/g' $1
sed -i 's/\\xE5/å/g' $1
sed -i 's/\\xE6/æ/g' $1
sed -i 's/\\xE7/ç/g' $1
sed -i 's/\\xE8/è/g' $1
sed -i 's/\\xE9/e/g' $1
sed -i 's/\\xEA/ê/g' $1
sed -i 's/\\xEB/ë/g' $1
sed -i 's/\\xEC/ì/g' $1
sed -i 's/\\xED/i/g' $1
sed -i 's/\\xEE/î/g' $1
sed -i 's/\\xEF/ï/g' $1
sed -i 's/\\xF0/ð/g' $1
sed -i 's/\\xF1/ñ/g' $1
sed -i 's/\\xF2/ò/g' $1
sed -i 's/\\xF3/o/g' $1
sed -i 's/\\xF4/ô/g' $1
sed -i 's/\\xF5/õ/g' $1
sed -i 's/\\xF6/o/g' $1
sed -i 's/\\xF7/÷/g' $1
sed -i 's/\\xF8/ø/g' $1
sed -i 's/\\xF9/ù/g' $1
sed -i 's/\\xFA/u/g' $1
sed -i 's/\\xFB/û/g' $1
sed -i 's/\\xFC/u/g' $1
sed -i 's/\\xFD/ý/g' $1
sed -i 's/\\xFE/þ/g' $1
sed -i 's/\\xFF/\ÿ/g' $1

일반 문자 변환기에 대한 16진수 코드를 만드는 방법은 무엇입니까? 그래서 내가 실행하면 :

sh thementionedscript.sh hexstrings.txt

-->> hexstrings.txt의 모든 16진수 문자는 일반 문자로 변환되어야 합니다. 예: 이전:

\x68\x69

뒤쪽에:

hi

답변1

존재하다 bash:

#!/bin/bash

while IFS= read -r line; do
    printf "$line"
done

IFS=IFS 스트리핑이 발생하는 것을 방지해야 합니다. 즉, 대부분의 경우(IFS에는 표준인 공백이 포함되어 있음) IFS를 비워 두지 않으면 "${line}"참조 여부에 관계없이 양쪽에서 공백이 제거됩니다. -r읽기 옵션은 백스페이스 해석을 중지합니다.

이는 소스 코드에 존재할 수 있는 다른 이스케이프 코드도 ​​고려한다는 점을 명심하세요. 이것이 걱정된다면 파일을 문자별로 읽고 printf가 \x 이스케이프 코드에서만 작동하도록 하십시오.

당신은해야언제나임시 파일을 사용하므로 다음과 같이 실행하십시오.

./foo < myfile > mytempfile && mv mytempfile myfile

또한 파일을 편집하는 데 사용하지 마십시오 sed -i. 이식성이 없으며 구현에 따라 구문이 달라집니다(예: 코드는 Mac OSX 및 대부분의 BSD에서 실패합니다). ed파일 편집을 위한 더 나은 선택입니다.

답변2

배쉬에서?

#!/bin/bash

while IFS= read line
 do
 echo -e "$line"
done

답변3

문제에 대한 새로운 시각은 다음과 같습니다.

변경 작업 sed이 97% 완료되었습니다.
다음은 이를 작동시키기 위한 몇 가지 기본 사항과 몇 가지 선택적 사항입니다.

  • 모든 패턴에서 대소문자를 구분하지 않는 것이 유용할 수 있습니다. ig대신 사용g

  • 모든 교체 작업을 한 번에 수행할 수 있습니다. 예를 들어 연결하면 됩니다. 's/\\x00/NUL/ig;s/\\x01/SOH/ig;s/\\x02/STX/ig;...',
    또는
    's/\\x01/SOH/ig; 
      s/\\x02/STX/ig; 
      ... 
      s/\\xFE/þ/ig; 
      s/\\xFF/ÿ/ig;'

  • 일부 대체 표현식을 변경해야 합니다. 's/a/b/ig'의 참조와 충돌     해야
    /'/합니다. 그렇지 않으면        자체가 역참조이므로        이스케이프 해야 합니다./\x27/'
    /\//\\//
    /&//\&/

  • /대체 표현식에 구분 기호가 나타나면 구분 기호를 전환해야 합니다 /. 이 표현에 대해서만 |(또는 원하는 대로) 변경하세요. 예: s|\\x2F|/|g; 일부 sed 상황에서는 처음에 패턴을 이스케이프해야 합니다. 범위 표현.'\|^abc|q'

  • 귀하의 목록과 제가 생각해낸 목록(Windows-1252 기반 인코딩) 사이에 몇 가지 차이점이 있음을 발견했습니다. 다음 사항을 확인해 보세요: ( 7F'DEL')    A0(' ')    AD('SHY')

  • sed -i소위 내부 업데이트가 처리되는 방식에 대한 다양한 보고서를 접했습니다. 어쨌든 임시 파일을 사용하므로 sponge(package moreutils)를 사용하여 텍스트 파일을 덮어쓰는 경향이 있습니다.

그게 다야. 다음은 생성된 sed 명령의 예입니다.

 sed -e '
 s/\\x01/SOH/ig;
 s/\\x02/STX/ig;
 ...
 s/\\xFE/þ/ig;
 s/\\xFF/ÿ/ig;
 ' "$1" | sponge "$1"

전체 명령은 다음에서 찾을 수 있습니다..ubuntu 붙여넣기

답변4

고쳐 쓰다Windows-125216진수 값을 해석 하고 이를 현재 로케일(보통 *nix의 경우 UTF-8)의 인코딩으로 표현 하려면 다음 명령을 사용하면 됩니다. 노트. 각 입력 줄의 개행 문자(\n) 외에도 이 코드 조각은 입력으로 사용됩니다.오직형식의 데이터 \x33\x66\x99\xBB\xFF...다른 것은 오류를 발생시킵니다.

<file sed -re 's|(.)\\x|\1,0x|g; s|^\\x|0x|; $!{s|$|,0x0a|}' |
 tr '\n' ',' | recode Windows-1252/x1..UTF-8 

여기에서 내 원래 대답은 다음과 같습니다(다른 인코딩을 무시함).

xxd복구(-r) 포스트스크립트(-p) 모드에서 사용할 수 있습니다 . xxd패키지의 일부입니다 vi.
노트. 테스트 데이터에는 16진수\n(\x0a) 문자가 포함되어 있습니다.
xxd실제 \n 문자는 무시되므로 16진수 데이터를 원하는 만큼의 줄로 분할할 수 있습니다(테스트 파일에 표시된 대로).

xxd또한 직접 16진수 덤프를 변환하는 데에도 유용합니다. 68656c6c6f20776f726c64(안녕하세요 월드)...sed이 경우에는 '\x'만 제거하면 됩니다.

첫 번째 조각은 \xXX 형식이 아닌 문자를 무시합니다...

<file sed -e 's|\\x||g' | xxd -p -r

소스 파일에서 줄바꿈(\n 및 \x0a)을 유지하려면 이 옵션을 사용하십시오(다른 텍스트는 무시됨).

<file sed -e 's|\\x||g; s|$|0a|' | xxd -p -r

테스트 파일 만들기

echo -n "
\x63\x61\x74\x0a\x64\x6f\x67\x0a\x62\x69\x72\x64\x0a\x6d\x6f\x6f
\x73\x65\x0a\x61\x6c\x62\x61\x74\x72\x6f\x73\x73" >file

출력(첫 번째 조각에서 \xXX 데이터에서만 작동)

cat
dog
bird
moose
albatross

관련 정보