- ベストアンサー
コード変換を行う
ある要件でレコード内のTAB+LFをLFに変換したいのですが、 プログラムは作成せず、シェルレベル(awk,sedレベル)で 処理したいのですが、有効な手段をご存知の方はいらっし ゃいませんでしょうか? よろしくお願いいたします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>>残念ながら、Nなどで次の行を読み込んできたりしない限り >>パターンスペースに改行が存在することはありません >初心者なので申し訳ありませんが、この部分はどう解釈すれば >よろしいでしょうか。 はい。 sed の動作というのは、一行読み込んできてからその末尾の改行を 取り去ってから作業用スペースに送り込みます。 ですので、 sed -e 's/\t\n/\n/' としても作業用スペースには改行は存在しないので、この置換は 決して実行されることはありません。 しかし、N コマンドを使って次の1行を読み込むということをした場合 作業用スペースは 1行目の内容 改行 2行目の内容 のように、改行が間にはさみ込まれます。 すると sed -e 'N;s/\t\n/\n/' のような場合には置換が起きる可能性があるということです。 $ printf 'abc\t\ndef\t\nghi' | sed -e 's/\t\n/xxxx/' abc def ghi $ printf 'abc\t\ndef\t\nghi' | sed -e 'N;s/\t\n/xxxx/' abcxxxxdef ghi $ というわけです。
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
>sed 's/\t\n/\n/' <infile >outfile 残念ながら、Nなどで次の行を読み込んできたりしない限り パターンスペースに改行が存在することはありません。 あと、たまに置換文字列に \t とか \n とか書いても 文字通りにしか受け取らないのもないこともないです。 #さらに稀に検索文字列でも受け付けない奴がいる
お礼
有益な情報をいただき、ありがとうございます。 >残念ながら、Nなどで次の行を読み込んできたりしない限り >パターンスペースに改行が存在することはありません 初心者なので申し訳ありませんが、この部分はどう解釈すれば よろしいでしょうか。
- MASA_H
- ベストアンサー率42% (64/151)
タブは一般に\tで表します。よって、 sed 's/\t$//' <infile >outfile または sed 's/\t\n/\n/' <infile >outfile となります。
お礼
端的ににわかりやすく解説いただき、ありがとうございます。早速試して見たいと思います。
- notnot
- ベストアンサー率47% (4901/10362)
TAB+LF の並びだけ変換するなら、 sed 's/タブ$//' <infile >outfile です。 タブ文字の入力は、端末の設定によって違う場合もありますがたいていの場合は、Ctrl-V を押してから Tabキー です。 すべての TAB を削除するなら、 sed 's/タブ//g' <infile >outfile です。
お礼
早速ご回答いただき、ありがとうございます。あわせて全てTAB削除まで例示いただき、大変勉強になりました。
お礼
すごい深い意味があったのですね。大変、よくわかりました。早速いろいろと試して見ます。ありがとうございました。