• 締切済み

sedについて

下記ファイルをsedにて処理したいのですが皆様のお知恵をお貸し下さい ファイル 0,,,0,0,1,0,2,-50,0 上記ファイルの6番目,の前の1を0に書き換えたいのですが可能でしょうか? ファイルは,で区切られていて,の数と数字はランダムで変わりますので,のn番目の前の文字で検索出来れば良いのですが

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

sed -e 's/^\([^,]*,[^,*],[^,]*,[^,*],[^,]*,[^,]*\)1,/\10,/' とか.

関連するQ&A

  • SEDで教えてください。

    Perlのカテで申し訳ないのですが、SEDの記述で教えてください。 次のテキストの”ページ 105”以外の部分をすべて削除する処理の記述はどのようにしたらよいのでしょうか? ページの次の数字105は、いろんな数字が出てきます。 残す部分以外の文字列もいろんなものが出てきます。 ------テキスト--------------- あいうえお ページ 105:かきくけこ1000円さしすせそ。 たちつてと ------------------------------ ↓ -----処理後------------------- ページ 105 ------------------------------

    • ベストアンサー
    • Perl
  • sed で \ を含む文字列に置換

    現在、非常に多数のドキュメントの整形を LaTeXを使って自動的に行っています。 問題となっている処理のエッセンスを抜き出すと次のようなもので、テンプレートファイル中の __PATTERN__ という文字列を、その都度指定する文字列($string)に置換した後にplatexでコンパイルする、という流れです。 ---------- #!/bin/bash sed "s/__PATTERN__/$string/" < template.tex > document.tex platex document.tex ---------- 問題は、$string に '_'(アンダーバー)が含まれるケースで、platexのコンパイルでエラーが発生します。 これを回避するには、'_' を '\_' に置換する必要がありますが、上記処理の前に、$string 中の '_' を '\_' に置換する処理を加えても、上記処理の段階で '\' が消えてしまいます。 肝は sed でのエスケープのやり方だと思うのですが、どうにもうまく行きませんので、お知恵を拝借できればと思います。 なお、tex ファイル中、__PATTERN__ は、他のコマンドの引数内で使用されているため、\verb+ + で囲むという手段も使えません。

  • 複数パターンのsed文についての質問です。

    sedの使い方がよく分からない為、教えてください。 テキストの中で、同じパターンスペースに対して、 別の文字を置換させたいと考えています。 (一つ目のマッチングには、yyy 二つ目には、zzzなど) sed文ではコマンドブロックの書き方がわからないので、 sedスクリプトを別に用意してファイルを読み込ませた所、 うまくいきました。 sed -f test.sed test.txt しかし、第二段階として、置換文字列を変数にしたところ、 変数展開ができませんでした。実際には変数展開を考えているので、 困っているところです。 この問題を解決できるようなsed文(sed -e)か、sedスクリプトを 教えて頂きたく宜しくお願いいたします。 下記、テスト材料です。 一つ目のabcを $HOMEに、 二つ目のabcを $SHELLに置き換えたいです。 text.txt (編集元テキスト) ------------------ User yyyyy abc Pass zzzzz abc ------------------- test.sed(SEDスクリプト) --------------------- /User/{ N N s/abc/$HOME/ N N N s/abc/$SHELL/ } ----------------------

  • grep,sedコマンドについて

    昨日に引き続き、またまた質問です。 昨日回答してくださった方、ありがとうございました。 その後自分でも色々勉強しまして、ファイルの中身を処理するにはgrepコマンドとsedコマンドが 有効である事が分かりました。 今回やりたいことは以下のファイルの数字と時間の部分(//のついている2行)の削除です //1 //00:00:03,600 --> 00:00:07,195 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx //2 //00:00:07,360 --> 00:00:09,635 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx     ・     ・ (実際のファイルには"//"はついていません) 理想の出力 xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx (xxxxxの部分には英語の台詞が入ります) で、以下が自分が考えた方法です 1.sedコマンドのみで削除 $ sed "/[0-9]*\n[0-9][0-9].*/d" ファイル名 結果 ファイルの内容がすべて表示されるだけ (a) 2.grepコマンドで抽出しパイプ処理 まずgrepで削除部分を抽出 $ grep -P "^[0-9]*\n[0-9][0-9].*" ファイル名 結果 1    00:00:03,600 --> 00:00:07,195    2    00:00:07,360 --> 00:00:09,635         ・         ・    10    11         ・         ・ となり、1~9までの数字と時間はちゃんと表示され 10以降は数字しか出ません。 (b) また -P の部分を -E にすると、何も表示されません (c) (perlの正規表現と拡張正規表現の違いはここでは無いように思えますが・・・) 2は最初でつまづいたのでどのコマンドに渡して行を削除するかはまだ分かりません (d) 削除の際、2行まとめて行うのは、一行ずつ行うと、台詞の部分に数字のみが入っていた場合 削除されるのを防ぐためです 以上長くなりましたが(a)~(d)の質問、疑問に回答していただけると嬉しいです。 よろしくお願いします。

  • sedコマンド置換について(マッチした数字を演算に再利用したい)

    こんにちは Linuxのsedコマンドについて質問させてください。 軽く検索をかけたりUNIXのコマンド本を調べましたが、わかりませんでした。 例えば正規表現でマッチした数字を2倍して返す処理をする場合 perlではhogeという文字列に対して  hoge=~s/(\d+)/$1*2/g; このような処理で実現できると思います。 このように今マッチしたものに対して何か処理を行って置換するということは sedコマンド、もしくはそれを使ったシェルスクリプトで処理することは可能でしょうか? sedの方が処理速度が速いので、こちらを使いたいのです。

  • sedで特定の文字列を抜き出す方法

    有識者の知恵をお借りしたいのですが、以下のようなエラーログの出力結果が あった場合、AAAAA01が含まれる文字列の括弧の中の部分をsedで抜き出したい 場合はどのような指定をすればよいでしょうか。 括弧の中の文字はランダムで毎回同じとは限らない場合の指定方法をご教示下さい。 AAAAA00 AAAAA01 AAAAA02 AAAAA03 AAAAA04 AAAAA05 AAAAA06 (AAAAA07) BBBBB00 BBBBB01 BBBBB02 BBBBB03 BBBBB4 BBBBB05 BBBBB06 (BBBBB7) CCCCC00 CCCCC01 CCCCC02 CCCCC03 CCCCC4 CCCCC05 CCCCC06 (CCCCC7) 以下のコマンドで問題なく処理されますでしょうか。 sed -n "s/.*AAAAA01.*\((,)*\)\$ よろしくお願い致します。

  • Unicode 対応の sed って無いのですか?

    Windows でUTF8 日本語を処理できる sed は未だ存在しないのでしょうか? SJIS の日本語文章は正しく動作しますが、unicode のファイルの日本語処理は動作しません。 utf8 の入力ファイル、スクリプトファイル(.sed)を使用すると正しく動きません。 処理可能な sed はありますか? 例えば:  in.txt の内容 = 日本語, script.sed 内容= s/日本語/jjjj/ の uft8 ファイル、とし、 sed -f script.sed in.txt > ot.txt を実行 →エラー発生。 no such command as ・ソs/譌・譛ャ隱・jjjj/ と文字化け?。・ソ、ってゴミ?。 (日本語なしの script でも同一) script.sed をSJIS とすると、エラーは出ないが、ot.txt は空。 (色々の sed で確認しましたが、onigsed での --ctype=utf8 指定も駄目でした。)

  • sedで文字列の抜き出し

    ある一部分の文字列を抜き出したく、sedを使用したいと思って試行錯誤しております。 ↓あるファイル内の文字列 aaa bbb=ccc:ddd=eee:fff=ggg: aaa bbb=hhh:ddd=iii:fff=jjj: ※aaaとbbbの間はスペースです。 ※bbb,ddd,fffはある一定のキーワードです。 ※ccc,eee,ggg,hhh,iii,jjjはバラバラの文字列で長さも一定ではありません。 【質問】 上記の文字列の中でddd=の後の文字列(eee,iii)のみを抜き出したいです。 以下のようなsedを試してみましたが、 eee:fff=ggg iii:fff=jjj が抜き出されてしまいます。 sed 's/.*:ddd=\(.*\):\(.*\)$/\1/' 恐れ入りますが、皆様の知恵をお貸し下さい。

  • Excel:文字と数字の間に数字を追加するマクロ。

    こんばんは、よろしくお願いします。 csvのデータで数字とかなが下記のようなデータがあります。 ※処理前 頭の数字以降は、文字と数字がランダムなデータ。全体の文字数もランダム 900000000000085600000008~0051038901フ(半角)~ 20000000000008560000008~0051038902サ~ ※処理後 900000000000085600000008~0000510389フ~ 20000000000008560000008~0000510389サ~ というようなデータの 半角カナの前の数字2ケタを削除し、10桁前に00を追加するようなマクロをExcelで作成したいのですが、 カナの前の数字の桁数が一定ではないこと、またカナの前の数字の桁数が多いため(40桁以上) のため指数表記になってしまう。 という、2点で困っています。 データ数が多くなることを考えると、前から1文字ずつ検索し、 判断していくのは、難しいかなと考えております。 Val関数で、取得しようとしたのですが、指数表記で上手く行きませんでした。 どのように、処理すればよろしいでしょうか。 お教え下さい。

  • sedの置換文字に変数を使用したいのですが・・・

    あるファイルの特定の文字を変換し、上書きをする処理を行いたいのですが、sedの置換文字に変数が渡せなくて困っています。 例: X="a" Y="b" echo test.txt | sed 's/${X}/${Y/g}' >test.txt sedでは置換文字に${X}といった変数を使用することはできないのでしょうか?