2016-07-25 14 views
1

cid(#)で囲まれた10進数(!)ASCII値で表されるいくつかの文字を含むファイルがあります。 (cid:104)h)。したがって、文字列helloは、(cid:104)(cid:101)(cid:108)(cid:108)(cid:111)と表されます。sedを使用してascii charと値を置き換えてください

これを対応するASCII文字でsedを使用してどのように置き換えることができますか?

$ cat input.txt 
first line 
pre (cid:104)(cid:101)(cid:108)(cid:108)(cid:111) post 
last line 

私がこれまで試したことは次のとおりです:

$ x="(cid:104)(cid:101)(cid:108)(cid:108)(cid:111)" 
$ echo $x | sed 's/(cid:\([^\)]*\))/\1/g' 
104101108108111 

しかし、おしっこ、私は「出力はhello

$ cat output.txt 
first line 
pre hello post 
last line 

する必要があります。ここ

は、サンプルファイルでありますm printfsedに使用しようとしています。しかしchr($1)の代わりsprintf "%c", $1を使用することを示唆するために123 @printf

sed 's/(cid:\([^\)]*\))/'`printf "\x$(printf %x \1)"`'/g' 
+1

あなたの更新の問題を考えると、正確な、所望の出力は何ですか?更新が私たちの現在の回答を無効にするので、最初から[mcve]を提供することが重要であることに注意してください。 – fedorqui

+0

「sedを使う」がなぜ必要なのかを説明する必要があるかもしれません。これは、awkやperlなどのより適切なツールを使用するよりはるかに困難です... –

答えて

2
$ cat input.txt 
first line 
pre (cid:104)(cid:101)(cid:108)(cid:108)(cid:111) post 
last line 

$ perl -pe 's/\(cid:(\d+)\)/chr($1)/ge' input.txt > output.txt 
$ cat output.txt 
first line 
pre hello post 
last line 

おかげに後方参照\1を渡す方法を見つけることができません。だから、(cid:XX)内から数字を抽出する問題です

$ awk 'BEGIN {printf "%c", 104}' 
h 

:あなたは、それに対応する文字にASCIIコードに変換することができます%cを使用Integer ASCII value to character in BASH using printf

+0

私たちの特別な場合には、 "通常"の文字もあります。つまり、すべての文字が '(cid:#)'で表されるわけではありません。元の質問を編集してサンプルファイル – wolfrevo

+0

を表示すると、出力ファイルをサンプル入力ファイルでどのように表示するかを明示的に投稿できますか?それに応じて回答を編集するか、 – Sundeep

+1

を削除します。 'sprintf'の代わりに' chr'を使うことができます。つまり、 'perl -pe 's/\(cid:(\ d +)\)/ chr($ 1)/ ge" ' – 123

0

chrリファレンス

のドキュメントを参照してください。これは私が (にFSを設定し、フィールドをループで実行します。

awk -v FS='(' '{for (i=2; i<=NF; i++) { 
        r=gensub(/cid:([0-9]+)\)/, "\\1", "g", $i); 
        printf "%c", r+0 
        } 
       }' file 

これはgensub()を使用し、GNU awk: accessing captured groups in replacement textで説明したようにキャプチャグループにアクセスします。したがって、GNU awkに依存します。あなたの与えられた入力の場合

は、それが返されます。

$ awk -v FS='(' '{for (i=2; i<=NF; i++) {r=gensub(/cid:([0-9]+)\)/, "\\1", "g", $i); printf "%c", r+0}}' file 
hello 
関連する問題