9

grep コマンドに問題があります。フォルダーに次の 2 つのファイルがあります。

test.dat:

fdf
bla(fd_bla_bla) =&
bdf bla

test2.dat

fd
fd
fij
d
bla(fdf)

fdjk
bla

今、私はそれの後に括弧を持つblaを検索します

grep 'bla(*)' *

しかし、最初のファイルのエントリが表示されるだけです...理由がわかりましたか?

4

7 に答える 7

10

その一致を行うには、正規表現が必要です。

egrep "bla\(.*\)" *.dat

正しい結果が得られます。

于 2013-09-19T09:04:36.793 に答える
2

.*代わりに必要なのは*

Regex では.*、長さが 0 以上の任意の文字列に一致しました。*シェル GLOB は、任意の検索のテキストに一致させるために使用しますが、grep使用しませんGLOB

grep 'bla(.*)' *.dat

OR 単語境界の場合:

grep '\<bla(.*)' *.dat

または awk を使用:

awk '/bla\(.*\)/{print FILENAME ":" $0}' *.dat
于 2013-09-19T09:16:36.933 に答える
2

別の解決策は、文字列が固定文字列で、括弧が含まれている場合です。したがって、 grep -F の助けを借りて、文字列を固定することができ、そのまま検索されます。 cat enb.txt | grep -F '[PHY][I]UE'** cat enb.txt は、キャッチしたいファイル名です。 grep -F '[PHY][I]UE' grep -F 文字列をこの'[PHY][I]UE' Fixed にします。

これを試してみてください

于 2017-01-19T12:38:10.053 に答える
1
$ 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)
于 2013-09-20T15:46:24.550 に答える
1
perl -lne 'print if(/bla\(.*\)/)' your_file
于 2013-09-19T09:16:46.113 に答える