3

あるファイルの文字列を考えると:

hel           string1
hell          string2
hello         string3

helを使ってキャプチャしたいcat file | grep 'regexp here'

たくさんの正規表現を試してみましたが、うまくいかないようです。最も理にかなっているのは、次のとおりです。grep -E '\Ahel'しかし、それは機能していないようです。http://rubular.com/ただし、動作します。それがうまくいかない理由はありgrepますか?

また、各行の前にタブスペースを入れて上記の文字列を貼り付けると、\Aでは動作しないようですrubular。文字列の先頭に一致すると思い\Aましたが、それより前の文字は関係ありません。\A文字列の前にスペースがあると、一致が停止するのはなぜですか?

4

4 に答える 4

3

ERE ( ) は、試合開始の表示を-Eサポートしていません。代わりに\A試してください。^

-m 1各ファイルの最初の一致後に grep を停止するために使用します。

grep で (行全体ではなく) 一致した文字列のみを出力する場合は、-o.

-hgrep 出力でのファイル名の出力を抑制したい場合に使用します。

例:

 grep -Eohm 1 "^hel" *.log

検索文字列がファイルの最初の行にある場合にのみ出力を強制する必要がある場合は、次を使用できますhead

 head -qn 1 *.log | grep -Eoh "^hel"
于 2013-10-14T16:39:29.667 に答える
2

ERE はサポートしていません\Aが、PCRE はサポートしているためgrep -P、同じ正規表現で使用できます (利用可能な場合):

grep -P '\Ahel\b' file
hel           string1

また、単語境界\bを使用して一致を制限することも重要ですhello

あるいは、ERE では以下を使用できます。

egrep '^hel\b' 
hel           string1
于 2013-10-14T16:41:46.117 に答える
1

\A は文字列の先頭に一致すると思いましたが、それより前の文字は関係ありません。文字列の前にスペースがあると \A が一致しなくなったのはなぜですか?

\Aはテキストの先頭に一致しますが、テキストに 1 行以上ある場合は行頭には一致しません。

とにかく、grep はサポートしていないので、with とは逆に、複数行モードでは各行の先頭と一致する which\Aを使用する必要があります。^\A

于 2013-10-14T16:43:20.670 に答える
0

使用するawk

awk '$1=="hel"' file

PSファイルをgrepにcatする必要はありません。使用しますgrep 'regexp here' file

于 2013-10-14T17:13:09.137 に答える