2017-06-20 10 views
0

を探し、以下のようなディレクトリ構造があります:シェルスクリプトと特定のHTMLタグ

    services (directory) 
     |           |    
serviceui (directory)      serviceui1 (directory) 
     |           | 
service1 (directory)      service2 (directory) 
     |           | 
frontend         frontend 
     |           | 
      Have different files and each file has 
      a html tag with different tags. 
      For example, a sample file may contain 
      <Id>CheckUser</Id> 
      <Id1> bbb </Id1> 
      <Id2> drer </Id2> 

私はすべてのディレクトリをループbashシェルスクリプトを記述しようとしていますし、 frontendディレクトリにあるさまざまなファイルでserviceId htmlタグを探し、いくつのserviceIdsに内容 "CheckUser" があるか調べます。

私がbashスクリプトを使用しているのは今回が初めてです。これに頭を付けるのは本当にとても役に立ちます。

ありがとうございます!

答えて

1

どのように試合grep -r -c '<Id>CheckUser</Id>' *

+0

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 16480086) – DimaSan

+0

実際には、それは答えになることを意図していました。 「どのように試してみるか」のように、これを試してみてください。おそらく私はそれをひどく言いましたが、うまくいかない理由はありますか? – Jack

+0

いくつかの説明を追加すると、投稿の質が向上します。将来読者の質問に答えていることを覚えておいてください。そうした人々はあなたのコード提案の理由を知らないかもしれません。 – DimaSan

0

あなたは再帰的にはgrepを使用することができます。

grep -Fsrc '<Id>CheckUser</Id>' "services (directory)" |awk -F: '$NF > 0' 

これは、(正規表現を使用するよりもはるかに高速です-F、)プレーンテキストとして与えられたクエリを検索するためにはgrepを伝え、などのディレクトリを解析するようなエラーを無視ファイル(-s)を再帰的に解析し(-r)、調べられた各ファイルのパターンを含む行数を数えます。

awkコマンドは、カウントがゼロの行をすべて抑制します。 -F:はフィールドの区切り文字をコロンに設定し、最後のフィールドの値を$NFに設定します(NFはフィールドの番号です)。$NFはフィールド番号NFの値です。 Awkは条件のリストです。このコードは、アクションが与えられていないときのその特定のアクションがデフォルトであるので、$NF > 0 { print $0 }の略語です。これはオプションです(すべてのゼロを表示することもできます)。

 

注:

あなたの質問は読みにくかったです。私は過剰修正して、目標のディレクトリ名が文字通りservices (directory)であると仮定していますが、あなたの現在の場所には.のどのパスも使用できます。

これは、実際にHTMLまたはXMLを使用していないことを前提としています。

<Id> 
    CheckUser 
</Id> 

これが問題になる場合は、実際にXML構造を理解するコードが必要です。さもなければ、すべての空白を崩壊させ、ファイルを1行の文字列として解析するような、むしろ醜いハックを必要とします。

関連する問題