GNU/Linux >> Linux の 問題 >  >> Linux

正規表現の紹介

*のようなワイルドカード文字を使用したファイルグロブを使用しました および データストリームから特定のファイルまたはデータ行を選択する手段として。これらのツールは強力で、私は1日に何度も使用しています。ただし、ワイルドカードでは実行できないことがあります。

正規表現(regexesまたはRE)は、より複雑で柔軟なパターンを提供します

マッチング機能。ファイルグロブを使用するときに特定の文字が特殊文字を使用するのと同様に、REにも特殊文字があります。正規表現(RE)には、基本的な正規表現(BRE)と拡張正規表現(ERE)の2つの主要なタイプがあります。

最初に必要なのはいくつかの定義です。 正規表現という用語には多くの定義があります 、しかし多くは乾燥していて有益ではありません。これが私のものです。

正規表現は、データストリーム内のASCIIプレーンテキストデータの文字列と照合するために、さまざまなLinuxユーティリティでパターンとして使用できるリテラルおよびメタ文字の文字列です。一致が発生すると、ストリームからデータの行を抽出または削除したり、一致した文字列を何らかの方法で変更したりするために使用できます。

基本正規表現(BRE)と拡張正規表現(ERE)は、機能の点で大きな違いはありません。 (grep情報ページのセクション3.6「基本正規表現と拡張正規表現」を参照してください。)主な違いは、使用される構文とメタ文字の指定方法にあります。基本的な正規表現では、メタ文字 + { | 、および 彼らの特別な意味を失います。代わりに、バックスラッシュバージョンを使用する必要があります: \? \ + \{ \ | \( 、および \) 。 ERE構文は、多くの人が使いやすいと信じています。

注: 私が正規表現について話すとき、一般的な意味で、私は通常、基本的な正規表現と拡張された正規表現の両方を含めることを意味します。区別する必要がある場合は、基本的な正規表現には頭字語BREを使用し、拡張正規表現にはEREを使用します。

正規表現(RE)は、メタ文字を使用してデータストリーム内のパターンをファイルグロブよりもはるかに一致させるという概念を採用しており、データストリームから選択するアイテムをさらに細かく制御できます。 REは、さまざまなツールで解析するために使用されます データに対して何らかの変換を実行するために、文字のパターンに一致するデータストリーム。

注: 構文解析の一般的な意味の1つは、その構成要素を調べることによって何かを調べることです。この目的のために、データストリームを解析して、指定されたパターンに一致する文字のシーケンスを見つけます。

正規表現は、特別な魔法使いのsysadmin権限を持つ人だけが使用する、あいまいで不可解な呪文であるという評判があります。以下の1行のコード(送信されたファイルを使用可能な形式に変換するために使用したもの)は、これを確認しているように見えます:

$ cat Experiment_6-1.txt | grep -v Team | grep -v "^\s*$" | sed -e "s/[Ll]eader//" -e "s/\[//g" -e "s/\]//g" -e "s/)//g" | awk '{print $1" "$2" <"$3">"}' > addresses.txt

このコマンドパイプラインは、正規表現の知識がない人にとっては、意味のないジブリッシュの手に負えないシーケンスのように見えます。キャリアの早い段階で似たようなものに初めて遭遇したときは、確かにそのように思えました。ご覧のとおり、説明すると正規表現は比較的単純です。

単一の記事(単一のシリーズであっても)の正規表現によって開かれたすべての可能性に触れ始めることができます。正規表現に特化した本が全部あるので、来週のEnableSysadminに関する一連の記事で基本を探ります。最後に、システム管理者に共通のタスクを開始するのに十分な知識が得られます。うまくいけば、その後は自分でもっと学びたいと思うでしょう。

注: この記事は、2019年後半にApressからリリースされた、Linuxの本「Linuxの使用と管理:ゼロからSysAdmin」の第2巻の第6章を少し変更したものです。


Linux
  1. Awkおよび正規表現を使用してファイル内のテキストまたは文字列をフィルタリングする方法

  2. 正規表現の使用を開始する:例

  3. 正規表現の紹介

  1. 正規表現は、ファイルのフィルタリングに使用されるワイルドカードとどのように異なりますか?

  2. Bash:置換の正規表現?

  3. Amazon Linux の紹介

  1. \d は grep の基本式でサポートされていませんか?

  2. sed の正規表現で `\d` が機能しないのはなぜですか?

  3. Vim 内で式を評価する