• ベストアンサー

unixでテキストファイルの編集について

ファイルの編集をしたいのですが、やり方がわかりません。 やりたい事は以下の通りです。 #--------------------------------------------------# ファイル1 の全レコードの 4バイト目~6バイト目を 'XXX' という文字列に編集して ファイル2 へ出力する。 ファイル1 ---------- aaaaaaaaaa bbbbbbbbbb cccccccccc   ↓(編集) ファイル2 ---------- aaaXXXaaaa bbbXXXbbbb cccXXXcccc #--------------------------------------------------# どなたか回答お願いします。

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

  • ベストアンサー
回答No.2

ファイル1からファイル2にするんでしたね。 cat file1 | perl -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' > file2 です。訂正します。 #1のままでは、標準出力に書き出すだけでした。

de_la_monkey
質問者

お礼

回答ありがとうございます。 すみません、perl っていうのがわかりません。。。 $ man perl で調べようとしたのですが、説明が出てきませんでした。 あと先に言うべきでしたが、Cシェルでやりたいのです・・・

その他の回答 (5)

  • monda
  • ベストアンサー率87% (50/57)
回答No.6

うぅむ… 「cshで」と言っても、cshだけで出来ることなど限られてるのではあります。 「perlがインストールされていない環境で」と解釈して、sed でやってみると: # sed -e 's/^\(...\)\(...\)/\1XXX/' file1 > file2 ってのはどうでしょう。 perlのほうがいろいろと応用が利いて便利なのです。 「その場かぎり」でないなら是非perlをインストールしては いかがでしょう? --

  • Lean
  • ベストアンサー率72% (435/603)
回答No.5

>Cシェルでやりたいのです・・・ >Cシェルでお願いします。。。 回答された方全ての方法は、Cシェルで出来ますけど。 まあ、perlコマンドがインストールされていないと出来ないですが。 「Cシェルで」と書いてますがどういう意味で書いてますか? perlコマンドがないなら、awkコマンドでとか。 % awk '{printf("%sXXX%s\n",substr($0,1,3),substr($0,7))}' ファイル1 > ファイル2  

de_la_monkey
質問者

お礼

回答ありがとうございました。 確かに、Cシェルで#2の方法ができました。 #!/usr/bin/perl と書いてあったのでCシェルでは出来 ないのかと思ってしまいました。 (Cシェルは1行目に #!/bin/csh と書きますよね。) そこらへんも良く分かってないので勉強します・・・。 どうもありがとうございました。

回答No.4

#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 ではどうでしょう?

de_la_monkey
質問者

お礼

回答ありがとうございます。 仰る通り、#2の方法で動きました。 perlはインストールされていたみたいです、すみません。 私の持っているunixのコマンド集には載っていなかったので、なにか特別なことをしないと使えないのかと思っていました。 ただ、<STDIN>の意味がわからないので少し調べてみます。 ありがとうございました。

  • monda
  • ベストアンサー率87% (50/57)
回答No.3

ワタシなら perl で、 ================================================ #!/usr/bin/perl while (<>) {   substr($_,3,3) = "XXX";   print $_; }; ================================================ というところでしょうか。 これを ~/bin/s456XXX という名前で保存して。 $ chmod 755 ~/bin/s456XXX $ cat ファイル1 | ~/bin/s456XXX > ファイル2 ということで。 --

de_la_monkey
質問者

お礼

回答ありがとうございます。 すみません・・・、Cシェルでお願いします。。。

回答No.1

テキストファイルのエディタによる編集ではないのですが、 cat file1 | perl -e 'while (<STDIN>) { print substr($_,0,3)."XXX".substr($_,6); }' ってのはダメでしょうか(実装によってはperl5かもしれません。あと、そもそもperlがインストールされてなければNGですが…)。