• 締切済み

Bシェルでファイル中の文字列置換の方法について

Bシェルで複数のファイルを読み込み、 ファイル中のデータの先頭から6バイトがある特定の文字列の場合はそのままで、特定の文字列以外は空白に置換して出力したいのですが、 どのようにすればよいのでしょうか? お手数ですが、ご教示ください。

  • kiyoto
  • お礼率79% (163/205)

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.2

全体の骨組みはそれでもいいと思いますが、sed の行が補足の文章とコード部分で食い違っているので何が本当にやりたいのかわかりません。 sed のところに、!s とありますが、! は編集対象行条件の否定ですが、条件が何もなくいきなり !s と書くとどの行もsコマンドの編集対象でなくなるので、意味無いです。

kiyoto
質問者

お礼

お礼が遅くなりもうしわけありません。 アドバイスありがとうございました。

  • notnot
  • ベストアンサー率47% (4848/10261)
回答No.1

Bシェルだけでは無理なので(bashなら何とかなるかも)、sed 等を使うことになります。 for f in file1 file2 file3 do sed -e '2,$b' -e '/^ABCDEF/b' -e 's/^....../ /' $f > $f.out mv $f.out $f done sed の動作の説明は、 (1) 2行目以降ならそのまま出力 (2) 行頭ががABCDEFならそのまま出力 (3) どちらでもなければ行頭6文字を空白6個に変更して出力 ただ、これだと全ファイルを全て書き換えます。ファイルサイズが大きくてファイル全体の書き換えを避けたいなら、CとかPerlとかを使う必要があります。 あと、ファイルがテキストファイルじゃなくてバイナリファイルのときもCやPerl等が必要です。

kiyoto
質問者

補足

ご回答ありがとうございました。 私の質問の記述があいまいで処理に誤解を招いているとまずいので、補足させていただきます。 複数のファイル(a.txt b.txt~)を順に読み込んで、1行目のデータABCDEF1234、2行目のデータ1234567890の場合、先頭6文字がABCDEF以外であれば空白6文字に置換したいと思っております。読み込むファイルの名称はテキストファイルにしておきます。なお、データ中には*や#などのメタキャラも存在します。 以下のような感じで作ってみたのですが、うまく置換できないでいます。 お手数ですが、よろしくお願いします。 { while read PGMID do touch $PGMID.chg { while read PGMSRC do sed -e '!s/^toukds/ /' $PGMSRC >> $PGMID.chg done } < $PGMID done } < pgmid.txt

関連するQ&A

  • シェルで文字列を置換したい。

    UNIXのシェルであるファイルに書かれている文字から ある文字列を置換してそのファイルの中身を書き換えたいのですが どう書いていいのかわかりません。 ファイルを読み込んで該当の文字列を含んだ行を 見つけるところまではいったのですが・・・。 どなたか教えてください! よろしくお願いします。

  • ファイル内の文字列を置換

    掲示板利用させていただきます。 現在、ファイル内の特定の文字列を置換し、 保存する方法を探しています。 できればスクリプト言語を利用したいと考えています。 sedコマンドを使用して文字列置換を行ったのですが 置換前と置換後のファイルで 文字コードと改行コードが変わってしまうのでダメでした; 「ファイル内の特定の文字列を任意の文字列に置換し、置換前と置換後で改行コードと文字コードを変えない方法」 をご存知の方、ご教示ください。 bash,perl,javaのどれでも結構です。 よろしくおねがいします。

  • UNIX のシェル 文字の置換について

    シェルでファイルの文字列を置換したいです。 /*~*/のコメントの文字なので、1行数を変えたくないです。 ─────────────────────────── ※1文字分の空白を「_」で表示します。 test.txtファイルの「XXXXX」を「aa___」に置換する。 ─────────────────────────── 【test.txt 置換前】 /**************/ /*_XXXXXYYYYY_*/ /**************/ 【シェルの内容 test.sh】 #!/bin/csh set IN_henkan = `printf "%-5s" $1` perl -i -p -e 's/XXX/'$IN_henkan'/g' test.txt 【シェルを実行】 test.sh aa 【test.txt置換前 希望する状態】 /**************/ /*_aa___YYYYY_*/ /**************/ 【test.txt置換前 実際の状態】 /**************/ /*_aa_YYYYY_*/ /**************/ ─────────────────────────── 「aa」の後ろに1文字分の空白しか挿入されないです。

  • 文字列の置換

    AファイルのA1セルからBファイルのC1セルにデータを反映させたとします。 その際に以下のように文字列を複数置換させたいのです。 A1セル   C1セル りんご → みかん みかん → ぶどう なし  → 空欄 空欄  → 空欄 上記のようにセルのデータを複数置換することはできるのでしょうか? 又、置換できるならどの関数を使えばよいのでしょうか?

  • 長い文字列の置換を出来るエディタを教えてください。

    数式Texのコマンドなんですが、1000文字の文字列を1500文字の文字列に置換しようとしたところ、255バイト以上のデータはきられてしまい、正常に置換できませんでした。 秀丸、Wordのソフトウェアや複数行置換のフリーウェアを探したのですが、正常に置換できませんでした。 このように1000文字を1500文字への置換等、長い文字列を置換できるソフトウェアがあれば教えてください。

  • Cシェルの文字列操作について

    初心者ですが、Cシェルで、 最大7バイトの文字列('25'とか'1234567')を左空白埋めで表示したいのですがどうしたらよいでしょうか。 (7 - (文字列のバイト数))×空白 + 文字列 ??

  • 文字列の置換で・・・

    Javaでの文字列の置換についてなんですが ある文字を任意の文字に置換し表示させるとともに 何個の文字を置換したかも同時に知らせたい場合は どのような処理をしたらよいでしょうか? ぜひご協力よろしくお願いします!! (例)入力した文字列に"a"が含まれる場合は"b"に置換し   その際に変換した文字数も表示してください。     basic→出力結果: "bbsic" 置換した文字数は1です。

    • ベストアンサー
    • Java
  • 特定行までの文字列置換

    先頭行から10行目までにある特定文字を変換し、11行目以降最終行まではそのまま出力したいのですが、どのようにすればよいのでしょうか。 ファイル内のレコード件数が多いので、置換対象は先頭10行までとしたいのです。

    • ベストアンサー
    • Perl
  • cshの文字列置換

    ヤマトです。 cshでファイル文字列を置換したいのですが、分かりません。 環境はRed Had Linux7.2です。 hoge1.txt の中の 'HIDUKE' という文字列を今日の日付に置換し、 hoge2.txt に出力するようなシェルを作りましたが、正常に動作しません。 ====hoge1.txt(置換前)==== 今日はHIDUKEです。 ====hoge1.txt(置換前)==== 今日は030814です。 ====SAMPLE.sh(一部抜粋)==== set TODAY = `date +"%y%m%d"` sed 's/HIDUKE/$TODAY/g' < hoge1.txt > hoge2.txt 以上のようなシェルを作りました。 結果として、hoge2.txtには出力されるのですが、 「今日は$TODAYです」 となってしまいます。 変数の値を置換するにはどのようにしたら良いのでしょうか? 教えて頂けると有り難く思います。宜しくお願いします。

  • Bシェルで、ファイル内にある文字列があるかどうかチェックする方法

    Bシェルプログラムで、指定したディレクトリ内の全てのファイル内に、ある文字列があった場合、そのファイルを別のあるディレクトリに移動させる。というプログラムを作成したいのです。 指定したディレクトリ内のファイル名を取るとこまではわかったのですが、文字列を検索する術がよくわかりません。 ヒントでも何でも教えてください。 よろしくおねがいします。

専門家に質問してみよう