• ベストアンサー

sedコマンドで、教えてください。

ファイル内のHex09(タブコード)1バイトを別の文字(例えば「1」)に変換したい場合はどのようにすればいいでしょうか? Hexの扱いがわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.3

これは蛇足です。Ruby の例がなんか汚い、と思ってましたが ruby -pe 'gsub(/\x09/, "\x31")' hogefile これで綺麗になりました。「$_」というのは現在着目行のことで、 Perl でも以下のごとく暗黙裡にこれを使っているのです。 perl -pe '$_ =~ s/\x09/\x31/g' hogefile 再三の書き込み、失礼しました。

epson01
質問者

お礼

ありがとうございました。 ほかでの書き込みは、何度書き込んでも、エラーで帰ってきましたから、何度も書き込んでいました。

その他の回答 (2)

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.2

別の質問も見ましたが、任意の16進表記同士を変換しなければならないのですか? それだったら sed では力不足。AWK, Perl, Ruby の例を示します。 awk '{gsub(/\x09/, "\x31", $0); print $0}' hogefile perl -pe 's/\x09/\x31/g' hogefile ruby -pe '$_.gsub!(/\x09/, "\x31")' hogefile Perl と Ruby では -i.bak のようにすれば hogefile そのものが変更され、 元の内容はバックアップファイル hogefile.bak に保存されます。

  • nightowl
  • ベストアンサー率44% (490/1101)
回答No.1

こんにちは。sed で16進表記は使えましたっけ? ちょっと反則っぽいですがシェルでは Control-v を打てば 生のタブが入力できますので sed 's/(ここで C-v TAB)/1/g' hogefile のような感じでやってみてください。 # マルチポストは感心しませんけど。

関連するQ&A

専門家に質問してみよう