• ベストアンサー

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ですが…)。

関連するQ&A

  • COBOLの改行

    COBOLでWRITEを使って<1>のように出力したいのですがAFTER(もしくはBEFORE) 1 LINE と指定すると<2>のように一行空いて出力されてしまうのはなぜなのでしょう。 ちなみにAFTERを指定しないと<3>のように改行が入らず出力されます。 <1> AAAAAAAAAA BBBBBBBBBB CCCCCCCCCC <2> AAAAAAAAAA BBBBBBBBBB CCCCCCCCCC <3> AAAAAAAAAABBBBBBBBBBCCCCCCCCCC

  • テキストから特定の文字列で始まる行を抜き出す

    現在、ファイルの編集作業を行っているんですが .txt形式のファイルで以下のような形式があります XXX_Title = "Hello japan" XXX_Name = "Jack" XXX_Title = "Hello USA" XXX_Name = "Alice" ... この時特定の文字列「XXX_Title」から始まる行を抜き出したいのですが、何か良いソフトはご存知じゃないでしょうか? 求める出力結果としては 「XXX_Title = "Hello japan" XXX_Title = "Hello USA"」 といった感じです。

  • テキストファイルを直接置換する方法

    VBAに関する質問です。 複数のテキストファイルを読み込んで 指定した文字列を別の文字列に検索・置換してくれるプログラムを作りたいと考えています。 これをするためには一度 Set MyTxt = FSO.OpenTextFile(StrPath, 1) Do While MyTxt.AtEndOfStream = False hairetu(xxx) = MyTxt.ReadLine loop のようにしてテキストデータを全て配列に読み込み、 Replace関数で一つずつ検索・置換した後に Open StrPath For Output As #1 Print #1, hairetu(xxx) のようにしてファイルを出力し直すしかないですか? 配列に読み込まずに 既存のファイルを直接編集する方法を教えてください。

  • ファイルの編集方法

    シェルスクリプトでファイルの中身の特定バイトを切り出し、その前に文字列を付加してファイルへ出力するにはどうしたらよいでしょうか? ↓こんなイメージにしたいのですが cat input.dat | cut -b1-5 | sort | uniq | echo "abc"$1

  • vbsで文字列内の改行コードを置換もしくは削除

    ある帳票作成ソフトにCSVを渡して帳票を作成するのですが、カンマで区切られた文字列内に改行コードが存在すると、CSVの区切りを判定してくれず(改行とみなされてしまう)、うまく帳票を出力してくれません。vbsで改行コードを削除、もしくは何か違う文字に置き換えしようと思うのですが、vbsにはうといためよくわかりません。どなたかご教授してもらえないでしょうか?。やりたいことは 元のCSV 【1行目】AAAAAAAAAA,BBBBB<改行コード>BBBBBB 【2行目】CCCCCCCCC,DDDDDDDDDD 変換後のCSV 【1行目】AAAAAAAAAA,BBBBBBBBBB(もしくはAAAAAAAAAA,BBBBB@BBBBB) 【2行目】CCCCCCCCC,DDDDDDDDDD 行末の改行コードまで変換してはだめです。文字コードはUTF-8です。 よろしくお願い致します。

  • テキストファイルへの書き出し

    お世話になります。 ASP(VBScript)で質問なのですが、 例えば、テキストエリア内に あいうえお かきくけこ さしすせそ という風に複数行の文字列が記述してあるとして、 とあるボタンを押した時に、 この文字列をテキストエリア内に記述してあるとおりに テキストファイルへ出力したいのですが、 どのようにすればよいでしょうか? ご教授お願いいたします。

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

    bashでファイルの1行目の5バイト目にある文字だけを置換させたく sed、awkコマンドでいろいろやってみたのですが、 知識不足で全行の5バイト目が置換されたりして なかなかうまくいきません。 どなたかご回答お願いします。

  • テキストファイル内の(から)の取り出し

    テキストファイルの中の”(”から”)”までの中身をとりだしたい のですが言い方法が思いつきません。どのようにすればいいでしょうか? OSはSolarisまたはLinuxです。 ”(”の中は”(”が何重かネストしています。 手段は特に問わないのですが、今後のメンテを考慮すると awkかperlのスクリプトで実現できればありがたいでです。 イメージとしては ファイルAの中 文字列1( (・・) (・・) ) 文字列2( (・・) (・・) ) をA.文字列1、A.文字列2で出力できればと思います。

  • UNIXコマンドのjoinについて

    -------------- -------------- 1 XX XXX 1 xx xxx 2 YY YYY 2 yy yyy 3 ZZ ZZZ  3 zz zzz ~      ~ -------------- -------------- UNIXコマンドのjoinを用いて上の二つのファイルを結合させ、 ---------------------- 1 XX XXX xx xxx 2 YY YYY yy yyy 3 ZZ ZZZ zz zzz ~ ---------------------- としたかったのですが、一列目の数字が急に変化するとそれ以降の行が出力されなくなります。(例えば、100の次が1000になった時など) どのようしたらこのような事が防げるのでしょうか? もしjoinでは防げないなら、joinのように2つのファイルの1列目の数字が同じだった時に結合して出力してくれるプログラムを書ける方がいたら教えていただきたいです。 perlかC++だと助かります。よろしくお願いします。

  • バッチえファイルを編集するには??

    こんばんは。 初めて掲載します。 バッチファイルで、複数のあるファイルの中身の特定の文字列を一括編集したと思っているのですが、どのようにコマンドを組めばいいのでしょうか? コマンド、バッチは初めてなのでどのように組めばいいのか是非ともご教授願います。 例として、バッチを実行すると、 C:\temp\の下にtest1.xmlとtest2.xmlがあります。 バッチファイルを実行すると、その2つのファイルの中身のある特定の文字を編集("AAA"という文字列を"BBB"に)して保存する。 というような処理を行いたいです。

専門家に質問してみよう