痔になりやすい生活習慣とは?

お世話になります。

sedを使って文字列の置換をしたいと考えています。
sambaでwindowsから連携したファイルに対して置換を行いたいのですが、うまく置換ができません。
Linux側の「GNOME端末」からファイルの中身をのぞくと、全角の箇所が文字化けしてしまっていました。どうやら原因はこれだと思うのですが、どうすれば文字化けしていてもうまく置換できるでしょうか?
あるいはLinux側から見ても文字が化けないようにするにはどうすればよいでしょうか?

例)
  test[Tab]2008年5月05日[Tab]あああ[Tab]aaaaa
という文字列に対し、
sed -e 's/^.*\t.\(.*\)\t.*\t.*$/3\1/' test.txt
というコマンドを実行したが、うまく置換されない。
※test.txtは、文字列が格納されているファイル。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

。。

。んっと。。。
#2は あまりにはしょりすぎていて見当違いな投稿にもみえそうですね
失礼しました。

やりたいことをちょっと整理させてください。

【1】Shift_JISのファイルをUTF-8環境下で操作したい
【2】各行先頭から数えて、最初と二番目のタブに挟まれている部分を取り出す
【3】文字列の先頭1文字を『3』に置換する
【4】結果はShift_JISのままにしておきたい

。。。ということであっていますか?

#2の回答は上記【2】の手順のみでした。よって【3】の処理もするなら

awk '{ print $2 }' test.txt | sed -e 's/^./3/'

で出来るとおもいます。(awkで置換までやればよさげなんですが、実はawkは得意では無いのでそこんとこよくわかりません。美しくないパイプ処理ですみません)

それで、肝心の文字コードに関してですが、#3の方のご提示のようにnkfをパイプで繋げれば表示はされると思います。

nkf -w test.txt | awk '{ print $2 }' | sed -e 's/^./3/'

表示はされるのですが、もしかしてファイルにリダイレクトしたいとかだったら
awk '{ print $2 }' | sed -e 's/^./3/' > test.out
だけでいいかもしれません。文字コードに関する処理はないのでtest.outはShift_JISのままです。

ちなみに、Gnome端末なら表示するロケールをShift_JISに変えられます。
そうしておけばデータの文字コードを変換すること無く表示されるようになります。
Gnome端末のメニュー「端末」→「文字コードの設定」からどうぞ。
    • good
    • 0

結論としては以下のコマンドでいかがでしょうか。



nkf -w test.txt | awk '{ print $2 }'
    • good
    • 0

それsedじゃなくてawkじゃ?



awk '{ print $2 }' test.txt
    • good
    • 0

提示されたコマンドを実行すると


3ああ
になったんですが、予期された動作ですか?
文字コードの変換は
nkf や iconv を使用してはいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます。

予期した動作としては、

3008年5月05日

なのですが、私の環境では置換以前の問題で、コマンド実行後も文字化けされたまま何もおきませんでした。

文字コードですが、windowsで保存したときはshift-jisだったのですが、utf-8で保存しなおせばできました。
しかし文字コードは変換しなおさなくはいけないのでしょうか?
できれば変換することなくそのままやりたいのですが。。。

お礼日時:2008/05/05 18:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング