質問: sambaで連携したファイルをlinuxからsedでの置換 お世話になります。 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は、文字列が格納されているファイル。 よろしくお願いいたします。
回答: 。。。んっと。。。 #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端末のメニュー「端末」→「文字コードの設定」からどうぞ。