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)PostScript(-p)モードで使用できます。xxdパッケージの一部ですvi
メモ。テストデータには、16進数\ n(\ x 0a)文字が含まれています。
xxd実際の\n文字は無視されるので、16進データを任意の行に分割できます(テストファイルに示すように)。

xxdまた、直接16進ダンプを変換するのにも役立ちます。68656c6c6f20776f726c64(こんにちはワールド)...sedこの場合は '\x' を削除するだけです。

最初の部分は\ xXX形式ではない文字を無視します。

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

ソースファイルで改行(\ nと\ x 0a)を維持するには、このオプションを使用します(他のテキストは無視されます)。

<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

関連情報