- ベストアンサー
unixでテキストファイルの編集について
ファイルの編集をしたいのですが、やり方がわかりません。 やりたい事は以下の通りです。 #--------------------------------------------------# ファイル1 の全レコードの 4バイト目~6バイト目を 'XXX' という文字列に編集して ファイル2 へ出力する。 ファイル1 ---------- aaaaaaaaaa bbbbbbbbbb cccccccccc ↓(編集) ファイル2 ---------- aaaXXXaaaa bbbXXXbbbb cccXXXcccc #--------------------------------------------------# どなたか回答お願いします。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ファイル1からファイル2にするんでしたね。 cat file1 | perl -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' > file2 です。訂正します。 #1のままでは、標準出力に書き出すだけでした。
その他の回答 (5)
- monda
- ベストアンサー率87% (50/57)
うぅむ… 「cshで」と言っても、cshだけで出来ることなど限られてるのではあります。 「perlがインストールされていない環境で」と解釈して、sed でやってみると: # sed -e 's/^\(...\)\(...\)/\1XXX/' file1 > file2 ってのはどうでしょう。 perlのほうがいろいろと応用が利いて便利なのです。 「その場かぎり」でないなら是非perlをインストールしては いかがでしょう? --
- Lean
- ベストアンサー率72% (435/603)
>Cシェルでやりたいのです・・・ >Cシェルでお願いします。。。 回答された方全ての方法は、Cシェルで出来ますけど。 まあ、perlコマンドがインストールされていないと出来ないですが。 「Cシェルで」と書いてますがどういう意味で書いてますか? perlコマンドがないなら、awkコマンドでとか。 % awk '{printf("%sXXX%s\n",substr($0,1,3),substr($0,7))}' ファイル1 > ファイル2
お礼
回答ありがとうございました。 確かに、Cシェルで#2の方法ができました。 #!/usr/bin/perl と書いてあったのでCシェルでは出来 ないのかと思ってしまいました。 (Cシェルは1行目に #!/bin/csh と書きますよね。) そこらへんも良く分かってないので勉強します・・・。 どうもありがとうございました。
- sinobu_wednesday
- ベストアンサー率54% (701/1296)
#1,2の回答者です。 > すみません、perl っていうのがわかりません。。。 perlが何なのかわからなくとも、インストールさえされていれば#2の方法で動きますよ。 とりあえず、目的のファイルをfile1という名前だと仮定して、 cat file1 | perl -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' > file2 とcshのプロンプトで入力してみてください。駄目なら、 cat file1 | perl5 -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' > file2 ではどうでしょう?
お礼
回答ありがとうございます。 仰る通り、#2の方法で動きました。 perlはインストールされていたみたいです、すみません。 私の持っているunixのコマンド集には載っていなかったので、なにか特別なことをしないと使えないのかと思っていました。 ただ、<STDIN>の意味がわからないので少し調べてみます。 ありがとうございました。
- monda
- ベストアンサー率87% (50/57)
ワタシなら perl で、 ================================================ #!/usr/bin/perl while (<>) { substr($_,3,3) = "XXX"; print $_; }; ================================================ というところでしょうか。 これを ~/bin/s456XXX という名前で保存して。 $ chmod 755 ~/bin/s456XXX $ cat ファイル1 | ~/bin/s456XXX > ファイル2 ということで。 --
お礼
回答ありがとうございます。 すみません・・・、Cシェルでお願いします。。。
- sinobu_wednesday
- ベストアンサー率54% (701/1296)
テキストファイルのエディタによる編集ではないのですが、 cat file1 | perl -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' ってのはダメでしょうか(実装によってはperl5かもしれません。あと、そもそもperlがインストールされてなければNGですが…)。
お礼
回答ありがとうございます。 すみません、perl っていうのがわかりません。。。 $ man perl で調べようとしたのですが、説明が出てきませんでした。 あと先に言うべきでしたが、Cシェルでやりたいのです・・・