86392


grepでディレクトリ内のマッチするファイルの一覧取り出したいけど正規表現が上手く効かないです

[code]

    grep -rnE '<SoundBox [\s\S]*?label=\\""' frontend
    
    # マッチさせたい文字列
    <SoundBox name={'Hoge'} checked={Hoge} label=""  />
    <SoundBox label="" name={'Hoge'} checked={Hoge} onChange={Hoge} />
    <SoundBox
      label=""
      name={'Hoge'}
      checked={Hoge}
      onChange={Hoge}
    />
    
[/code]

詳しい方教えて頂けないでしょうか？  
改行のパターンにもマッチしたいのですが、こちらだと上手くいかないです。


CC BY-SA 4.0
2022-02-16T08:27:50.713
86387
2022-02-16T14:15:53.760
2022-02-16T14:15:53.760
22565
22565
question
linux 正規表現 grep
grepで正規表現を使用してパターンにマッチするファイル一覧を出力したい

[code]

    grep -rnE '<SoundBox\s.*?label=""'
    
[/code]

でいかがでしょうか？


CC BY-SA 4.0
2022-02-16T08:45:58.697
86389
2022-02-16T08:45:58.697
14745
86387
answer


`GNU grep` であれば `-P` オプション(`PCRE` engine)を使うと1, 2行目全てがマッチします。

[code]

    $ grep --version
    grep (GNU grep) 3.7
    
    $ grep -nE '<SoundBox [\s\S]*?label=""' frontend
    2:<SoundBox label="" name={'Hoge'} checked={Hoge} onChange={Hoge} />
    
    $ grep -nP '<SoundBox [\s\S]*?label=\"\"' frontend
    1:<SoundBox name={'Hoge'} checked={Hoge} label=""  />
    2:<SoundBox label="" name={'Hoge'} checked={Hoge} onChange={Hoge} />
    
[/code]

ちなみに、`(\s|\S)*?` では両方にマッチします。

[code]

    $ grep -nE '<SoundBox (\S|\s)*?label=""' frontend
    1:<SoundBox name={'Hoge'} checked={Hoge} label=""  />
    2:<SoundBox label="" name={'Hoge'} checked={Hoge} onChange={Hoge} />
    
[/code]


CC BY-SA 4.0
2022-02-16T11:08:19.360
86392
2022-02-16T11:13:50.370
2022-02-16T11:13:50.370
47127
47127
86387
answer