grep は kwrite 正規表現 [AZ][AZ]+ と同じです。

grep は kwrite 正規表現 [AZ][AZ]+ と同じです。

それで時間がかかりましたが、いよいよ知りました。考える正規表現に関する限りkwrite

しかし、私はまだその知識をどのように翻訳するのかわかりませんgrep。私が何をしているのかを知ると、私は気に入っていますが、grepマニュアルはいつも私に頭痛を与えます。

次の行のような内容を一致させたい。

改行の後の大文字。
CAPI
TALSFOLLお世話になった
新しいライン。

つまり、2つ以上の大文字で始まる行です。しかし、どうすればいいのかわかりません。

では、kwrite次を使用して次の行を一致させます。

\n[A-Z][A-Z]+

しかしgrep…まあ。私は次のような感じがあります。

me@ROOROO:~/$ grep "^[A-Z]something" filename

しかし、

me@ROOROO:~/$ grep "^[A-Z][A-Z]+" filename

効果はありません(空のファイルを返します)。インターネット検索では、「grepは1つ以上の用語に一致します」と信じています。

me@ROOROO:~/$ grep "^[A-Z][A-Z]*" filename

正しい構文です。しかし残念ながら、それは問題を解決しません。

ベストアンサー1

最初の例では正しい構文を使用しました。問題は、+「拡張された」正規表現を使用する場合にのみ特殊と見なされることです。 GNU実装のマニュアルページからgrep

基本正規表現と拡張正規表現

基本正規表現では、メタ文字?、+、{、|、(および)はバックスラッシュバージョン\?、\+、\{、\|、\(および\)の代わりに特別な意味を失います。

\?\+および\|は非標準 GNU 拡張です)。

したがって、エスケープする必要があります+(GNUgrepまたは互換性があると仮定)。

$ grep "^[A-Z][A-Z]\+" filename

\{1,\}標準GNUに対応するものを使用してください\+

$ grep '^[A-Z][A-Z]\{1,\}' filename

ここでも:

$ grep '^[A-Z]\{2,\}' filename

grepまたは、フラグを渡すか実行して-E拡張正規表現を有効にしますegrepegrep70年代後半にこれらの拡張正規表現を導入したコマンド)。

$ grep -E "^[A-Z][A-Z]+" filename
$ egrep "^[A-Z][A-Z]+" filename

とにかく、これらすべては機能的に次のとおりです。

$ grep '^[A-Z][A-Z]' filename

+したがって、オペレータも必要ありません。

別の例では、以下を試しました。

$ grep "^[A-Z][A-Z]*" filename

*デフォルトの正規表現で動作しますが、1回以上ではなく0回以上一致します。解決策は次のとおりです。あなたの答え「1つの大文字、他の大文字、0個以上の大文字と一致します」と表示されているので動作します。質問の方法は、「1つの大文字を一致させてから1つ以上の大文字を一致させる」と言います。これは同じです。を使用して、{min,max}必要な正確な数字を指定することもできます。省略すると、max任意の数字が許可されます(この場合も正規表現の拡張が必要です)。

$ egrep "^[A-Z]{2,}"

(歴史egrep上、最初はサポートがサポートされていません(たとえば、{min,max}Solaris 11ではまだサポートされていません)。サポートが追加される前に追加されました(この場合、実際には下位互換性が壊れています)。/bin/egrep\{min,max\}grep{min,max}egrepegrep

おすすめ記事