grep コマンドに問題があります。フォルダーに次の 2 つのファイルがあります。
test.dat:
fdf
bla(fd_bla_bla) =&
bdf bla
test2.dat
fd
fd
fij
d
bla(fdf)
fdjk
bla
今、私はそれの後に括弧を持つblaを検索します
grep 'bla(*)' *
しかし、最初のファイルのエントリが表示されるだけです...理由がわかりましたか?
その一致を行うには、正規表現が必要です。
egrep "bla\(.*\)" *.dat
正しい結果が得られます。
.*
代わりに必要なのは*
Regex では.*
、長さが 0 以上の任意の文字列に一致しました。*
シェル GLOB は、任意の検索のテキストに一致させるために使用しますが、grep
使用しませんGLOB
。
grep 'bla(.*)' *.dat
OR 単語境界の場合:
grep '\<bla(.*)' *.dat
または awk を使用:
awk '/bla\(.*\)/{print FILENAME ":" $0}' *.dat
別の解決策は、文字列が固定文字列で、括弧が含まれている場合です。したがって、 grep -F の助けを借りて、文字列を固定することができ、そのまま検索されます。
cat enb.txt | grep -F '[PHY][I]UE'
** cat enb.txt は、キャッチしたいファイル名です。
grep -F '[PHY][I]UE'
grep -F 文字列をこの'[PHY][I]UE'
Fixed にします。
これを試してみてください
$ grep "bla(" *
動作するはずです。(必要のない正規表現でのグループ化を示しているため、エスケープする必要はありません。
$ cat > test7
fdf
bla(fd_bla_bla) =&
bdf bla
$ cat > test8
fd
fd
fij
d
bla(fdf)
fdjk
bla
$ grep "bla(" *
test7:bla(fd_bla_bla) =&
test8:bla(fdf)
perl -lne 'print if(/bla\(.*\)/)' your_file