RH[A-ZA-Z]をgrepと一致させます。

RH[A-ZA-Z]をgrepと一致させます。

grep文字列にRHと2文字(両方ともAとZの間の文字)が含まれるように正規表現RH [A-ZA-Z]を一致させるにはどうすればよいですか?

私は成功せずにこれを試しました。

 yum list-security --security | awk '{print $1}' | sort | uniq | grep RH[A-ZA-Z]
 Loaded
 RHEA-2014:1307
 RHSA-2014:1326
 RHBA-2014:1388
 RH@A-2014:1389
 RHSA-2014:1392
 RHSA-2014:1389
 RH7A-2014:1392
 RHSAA-2014:1389
 RHMAW-2014:1392

これが私が期待するものです:

 RHEA-2014:1307
 RHSA-2014:1326
 RHBA-2014:1388
 RHSA-2014:1392
 RHSA-2014:1389

ベストアンサー1

RH[A-ZA-Z]同じ文字セットを 2 回繰り返す単一文字クラスを含む正規表現です。 fromRHの後に続くすべての文字と一致します。 4番目の文字に制限はなく、4番目の文字も必要ありません。AZ

明らかに、これは所望の効果を得ることができない。

これを試してみてください:RH[A-Z][A-Z]または(拡張子grep -EまたはPerlgrep -P正規表現を使用)RH[A-Z]{2}

また、シェルがグローバル変数に拡張されないように、正規表現の周りに一重引用符(または変数またはコマンド置換を含める必要がある場合は二重引用符)を含めることをお勧めします。現在のディレクトリ名にファイルがある場合、RHAAシェルは引数を RHAA に拡張します。みんなあなたはgrep見ることができます:

$ grep RH[A-Z][A-Z] yael.txt  | wc -l
7
$ touch RHAA
$ grep RH[A-Z][A-Z] yael.txt  | wc -l
0

以下と同じ:

$ grep RHAA yael.txt  | wc -l
0

しかし、状況はさらに悪化しました。 「RHAB」というファイルもある場合、grepコマンドラインは次に展開されます。

grep RHAA RHAB yael.txt

grepしたがって、正規表現は、標準入力および/または検索される名前付きファイルだけでなく、ファイルからも検索されます。RHAARHAB

代わりに引用したgrepを使用してください。grep 'RH[A-Z][A-Z]'


修正する:

後ろに2文字だけ(ただし2つ以下)にRH従うには、代わりに次のように使用します。[A-Z]

grep 'RH[A-Z][A-Z][^A-Z]' yael.txt

3番目の文字クラスは、クラスを否定または反転する[^A-Z]ことから始まります。^つまり、どの文字にも一致します。とは別に A到着するZ


どのバージョンの正規表現を使用しても、一致を行の先頭に固定したいと思います。あなた^も使用できますが、外では全く異なる意味を持ちます[]。これがスタートアンカーポイントです。たとえば、次のようになります。

grep '^RH[A-Z][A-Z][^A-Z]' yael.txt

行のみ一致スタートそしてRH[A-Z][A-Z][^A-Z]、そして意志いいえ線を他の場所の対応するパターンと一致させます。

おすすめ記事