• ベストアンサー

Bシェル 文字列に含まれる特定文字のカウント

文字列の中に特定の文字が何個含まれているのかを知りたいです。wcやgrep を使ってみましたが、うまくいきません。教えてください。 例えば「123456789abc1defg0123456789」 の中に「1」は3個含まれているってのを調べたいです。

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

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

文字列の中には空白文字が無いとすると、bashの組み込み機能だけで出来ます。 #!/bin/bash A=123456789abc1defg0123456789 B=/$A/ ←先頭や末尾に特定文字が含まれている場合の考慮 IFS=1 ←ここに特定文字(一文字に限る) set -- $B echo $(($#-1)) 空白や記号が含まれている場合で、bashも無い場合 #!/bin/sh A=123456789abc1defg0123456789 LENA=`expr length "$A"` B=`echo "$A" | sed s/1//g` ←削除すると短くなる LENB=`expr length "$B"` echo `expr $LENA - $LENB` こっちの方がわかりやすいか。

heppocose
質問者

お礼

notnotさん、ありがとうございました。 文字列の長さの差分で数を数えるんですね。とても参考になりました。

その他の回答 (1)

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

どこまで使ってよくて, どこからは使っちゃいけないんだろ.... Perl とか awk とかを使えば一瞬なんだけど.... echo して tr から wc とかでいける?

heppocose
質問者

お礼

ご回答ありがとうございました。Perlは使った事ないもので・・ awkでも試みましたが分かりませんでした。

関連するQ&A

  • シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入

    こんにちは。 シェルスクリプトを用いて、ある特定の文字列の前に文字列を挿入したいと思います。 ・sample.txt (挿入前) -- <ABC> <ABC> Hello! </ABC> </ABC> -- ↓ ・sample.txt (挿入後) -- <ABC> <ABC> Hello! </ABC> Good Morning Good Evening </ABC> -- 上記のように、テキスト末尾から検索して、 はじめて表れた"</ABC>"のタグの前に、 Good Morning Good Evening という2行の文字列(無理なら1行でも)を追加したいと考えています。 "</ABC>"タグは2つありますが、末尾から検索して初めて表れたもののみ対象です。 このような操作を行うには、 どのようにシェルを組み合わせれば良いのでしょうか? grepやsedを用いて考えてはいますが、よく分かりません。 (grepで末尾から初めて表れた"</ABC>"の行番号を取得し、 その上に、sedで文字列を挿入するなどですが・・・よく分かりません) どなたか、よろしくお願いします。

  • ファイルからある文字列の個数を数えたい

    perl5でunixの"wc"や"grep -c"みたいに1つのファイルの中からある文字列の個数を カウントするスクリプトを作ろうとしています。 ファイルは256文字×10万行くらいのテキストで、 検索する文字列は15文字前後×40個(例えば「apple-000001」「lemon_orange」など)です。 どのようなスクリプトを組んだら効率よく各文字列をカウントできるのでしょうか? それよりwcやgrep -cを40回行った方が早いのでしょうか?

    • ベストアンサー
    • Perl
  • 特定の文字列を削除

    こんにちは perlで特定の文字列からその後ろをすべて 削除したいのですが、うまくできなくて質問します。 Ex)123.12abc   ⇒123.12 012.123abc   ⇒012.123 123.1234|| ⇒123.1234 上記のようなデータの少数点までの数字の後ろにabc、||、半角、全角スペースなど文字列があります. 少数点までの数字の後ろの文字列すべてを削除したいですが、 特定の文字列からその後ろにある文字列全てを指定する方法(正規表現)はありませんでしょうか? どうかご存知の方、教えてください!! よろしくお願いいたします。

  • EXCEL2003 指定した位置の文字列を取り出す

    "ABC,DEFG,H,IJ,KLMNO,PQ,RSTU"というような文字列に対して、「1」ならば"ABC"を、「5」ならば"KLMNO"を取り出したいと思います。 そういう関数があったと思うのですが思い出せません。 どなたか教えてください。 よろしくお願いします。

  • ディレクトリ内より特定の文字列を検索する際に関しまして

    文字列の検索に関して質問させていただきます。 あるファイル内から、 特定の文字列を探す際は、 grepを使用して検索をしています。 また、全体の中からファイル名を探す際なども、 findを使って、 探したりしているわけなんですが、 そうではなくて、 あるディレクトリ内にある 複数のファイル内全てから、 「特定の文字列が含まれているか?」を 探すコマンドってあるのでしょうか? 例えばこんな感じです。 ディレクトリAにファイルが10個あるとします。 この10個のファイルの中のどこかに、 「FOO_HEADER」という文字列が 存在しているか?を確認したいときに、 そう思いました。 今までなら、grepを使って、 1つずつファイル内を探したりしていました。 検索サイトで探してみたのですが、 キーワードが悪いのか、 どうも見つけることが出来ませんでした。 もしご存知の方がいらっしゃいましたら、 アドバイスの程お願い致します。 ■OS:Fedora9 ※ 通常はbashを使用しています。

  • 文字列数の高速なカウント

    あるファイルに入っている文字列をカウントする早い方法を探しています。 grep -c "sample"やawk '{if($1 ="sample") print}' |wc などを試していますが、巨大なファイルのためすごく時間がかかっています。 他に何か早く計算できる方法はないでしょうか?

  • 特定の文字列を含む行だけ削除する方法?

    いつもお世話になっています。 Unixであるテキストファイルから、 特定の文字列を含む行(レコード)だけを 削除する方法を教えてください。 現在、grepを使って、いろいろ試しているのですが、 正規表現で、 ”***”を含まない行(レコード)だけを 切り出すとう正規表現の説明が見あたりません。 "^**"は、**以外の文字を検索できるようですが、 文字列に対しては、使えません。 grep以外の方法でも良いのですが、 なるべくシンプルにできる方法がありましたら 教えてください。 宜敷お願いします。

  • Perlで一行で文字列の置き換え

    Perlでたとえば 文字列を$a = "abcdefg";を $a = "あdefg";と 先頭のabcをあに置き換える方法を1行の文で行いたいのですが可能でしょうか? 2行以上でなく、1行で済ませる方法です。 $b = "abcい";なら "あい"となってほしいです。

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

    VB6で開発してます。 以下のようなことをやりたいのですが、 効率のよい方法はないものでしょうか? <やりたいこと>  文字列1の中にある『_』と同じ位置にある  文字列2の文字を『_』に置き換えたい。  [変換前]   文字列1:12_3456_   文字列2:ABCDEFGH  [変換後]   文字列1:12_3456_   文字列2:AB_DEFG_ どなたかわかる方がいらっしゃったら教えて下さいm(_ _)m 

  • 文字列に数字を含むセルを調べたい

    Excel2007を使っています。 A列の文字列に数字を含む場合、B列に「含む」と表示させたいです。 どういった関数でできるのでしょうか? A列    B列 ABC1   含む DEFG 23HIJK  含む I4M5N   含む OPQ RSTUV W6X    含む 7YZ8    含む

専門家に質問してみよう