sedを使用して長い数字を16進数に変換する

sedを使用して長い数字を16進数に変換する

sed3桁より長い数字を16進数に変換するコマンドを作成しようとしています。つまり、このような文字列は現在私が持っている124 3275 7535もの124 0xccb 0x1d6fです。

sed 's@\([0-9]\{4,\}\)@sh -c "printf 0x%x \1"@ge'

ただし、文字列が一致しない場合は、変更されていない文字列を外部コマンドとして実行しようとするため、上記の文字列例では次のような結果が得られます。

sh: 1:124: 見つかりません

私がしたいことをどのように達成できますか? (まだsed

ベストアンサー1

質問のタイトルによると、「with sed」ではありませんが、sedからPerlに切り替えると、次の同等の表現を使用できます。

perl -p -e 's/\b\d{4,}\b/sprintf "%#x", $&/ge'

これにより、チェーンの他の式をある程度保存できます。

おすすめ記事