Gentooの創設者によるLinuxの基本。 パート2(1/5):正規表現

まえがき


このチュートリアルについて


Linux Professional Instituteの101試験に備えるための4つのチュートリアルの2つ目である管理の基本へようこそ。 このパートでは、正規表現を使用してファイル内のテキストをパターンで検索する方法を見ていきます。 次に、「ファイルシステム階層標準」(ファイルシステム階層標準または略称FHS)に精通し、システムで必要なファイルを見つける方法も示します。 その後、Linuxでプロセスをバックグラウンドで実行したり、プロセスのリストを表示したり、端末から切断したりするなど、プロセスを完全に制御する方法を学習します。 これに続いて、パイプライン、リダイレクト、ワードプロセッシングコマンドの簡単な紹介が続きます。 最後に、Linuxカーネルモジュールを紹介します。



特に、チュートリアルのこのパート(パート2)は、bashの基本的な知識がすでにあり、Linux管理の基本的なタスクの質の高い入門書を入手したい人に最適です。 Linuxを初めて使用する場合は、 最初にこの一連のチュートリアルの最初の部分を完了することをお勧めします。 一部の人にとっては、この資料のほとんどは新しいものですが、経験豊富なLinuxユーザーは基本的な管理スキルを要約するのに最適な方法であると感じるかもしれません。



LPI試験の準備以外の目的でこのチュートリアルの最初の問題を学習した場合、この問題を再度読む必要はありません。 ただし、試験を受ける予定がある場合は、この改訂版のチュートリアルを読み直すことを強くお勧めします。



正規表現


正規表現とは何ですか?


正規表現(英語の正規表現では、「regexp」または「regex」と略され、ロシア連邦では「正規」と呼ばれることもあります)は、テキストテンプレートを記述するために使用される特別な構文です。 Linuxシステムでは、パターンによるテキストの検索、およびテキストストリームの検索および置換操作に、正規表現が広く使用されています。



グロビングと比較して


正規表現を検討し始めるとすぐに、それらの構文がファイルのグロビング構文に非常に似ていることに気付くかもしれません。 ただし、間違えないでください。この類似性は非常に表面的なものです。 正規表現とグロビングパターンは、たとえ似ているように見えても、根本的に異なります。



単純な部分文字列


この警告の後、正規表現で最も基本的な、最も単純な部分文字列を見てみましょう。 これを行うには、所定の正規表現に従ってファイルの内容をスキャンするコマンドgrepを使用します。 grepは、正規表現に一致する各行を出力し、残りは無視します。



 $ grep bash /etc/passwd 
operator:x:11:0:operator:/root:/bin/bash root:x:0:0::/root:/bin/bash ftp:x:40:1::/home/ftp:/bin/bash

上記では、grepの最初のパラメーターはregexです。 2番目はファイル名です。 grepは、 / etc / passwdから各行を読み取り、単純な「bash」正規表現部分文字列を適用して一致を見つけます。 一致が見つかった場合、grepは文字列全体を出力しました。 それ以外の場合、文字列は無視されました。



単純な部分文字列を理解する


一般に、部分文字列を探している場合は、「特殊な」文字を使用せずに、文字どおりに指定できます。 部分文字列に+、。、*、[、]または\が含まれる場合にのみ特別な注意が必要です。この場合、これらの文字はバックスラッシュでエスケープし、部分文字列は引用符で囲む必要があります。 単純な部分文字列としての正規表現の例を次に示します。



メタキャラクター


メタキャラクターを使用した正規表現を使用すると、最近検討された例よりもはるかに複雑な検索を実行できます。 そのようなメタキャラクターの1つは「。」です。 (ドット)単一の文字に一致する:



 $ grep dev.sda /etc/fstab 
/dev/sda3 / reiserfs noatime,ro 1 1 /dev/sda1 /boot reiserfs noauto,noatime,notail 1 2 /dev/sda2 swap swap sw 0 0 #/dev/sda4 /mnt/extra reiserfs noatime,rw 1 1

この例では、テキストdev.sdaは/ etc / fstabのどの行にも文字通り現れません。 ただし、grepは、dev.sda行ではなく、dev.sdaパターンで文字列をスキャンします。 「。」 任意の1文字に一致します。 ご覧のとおり、メタキャラクターは「。」です。 機能的には、メタキャラクター「?」 glob順列で。



[]を使用する


「。」より具体的に文字を指定したい場合は、[and](角括弧)を使用して、一致する文字のサブセットを示します。



 $ grep dev.sda[12] /etc/fstab 
/dev/sda1 /boot reiserfs noauto,noatime,notail 1 2 /dev/sda2 swap swap sw 0 0

特にお気づきのように、この構文構成は、ファイル名をグロブ置換する場合の「[]」構成と同じように機能します。 繰り返しますが、これは正規表現の研究における曖昧さの1つです。構文は似ていますが、glob順列の構文と同一ではなく、混乱を招きます。



[^]を使用


[の直後に^を置くことにより、角括弧の値を反転できます。 この場合、角括弧は、角括弧内にリストされていない文字と一致します。 繰り返しますが、正規表現では[^]を使用し、グロブでは[!]を使用していることに注意してください。



 $ grep dev.hda[^12] /etc/fstab 
/dev/hda3 / reiserfs noatime,ro 1 1 #/dev/hda4 /mnt/extra reiserfs noatime,rw 1 1

異なる構文


大括弧内の構文は、他の正規表現とは根本的に異なることに注意することが重要です。 たとえば、「。」を入力した場合 角かっこ内では、これにより角かっこが「。」に一致するようになります。 文字通り、上記の例の1と2のように。 比較のため、「。」 「\」を入れない場合、角括弧の外側に置かれたメタ文字として解釈されます。 この事実を利用して、書かれたdev.sda行を含む/ etc / fstabから行を出力できます。



$ grep dev[.]sda /etc/fstab

また、次のように入力することもできます。



$ grep "dev\.sda" /etc/fstab

これらの正規表現は、おそらく/ etc / fstabファイルのどの行とも一致しません。



マタシムボル*


一部のメタキャラクター自体は何にも対応していませんが、前のキャラクターの意味を変更します。 そのような文字の1つは*(アスタリスク)です。これは、先行する文字の0回以上の繰り返しに一致するために使用されます。 これは、*が正規表現ではグロブとは異なる意味を持つことに注意してください。 以下にいくつかの例を示します。正規表現の一致がグロブ置換と異なる場合に特に注意してください。



したがって、統合のために繰り返します。行 "ac"は正規表現 "ab * c"に適合します。これは、アスタリスクによって前の式(b)の繰り返しをゼロ回繰り返すことができるためです。 繰り返しになりますが、正規表現のメタ文字*は、グロブ部分文字列の*文字とはまったく異なって解釈されることに注意してください。



行頭と行末


詳細に検討する最後のメタ文字は^および$です。これらはそれぞれ、行の先頭と末尾に一致するために使用されます。 正規表現の先頭で^を使用して、テンプレートを行の先頭に「添付」します。 次の例では、#文字で始まるすべての行に一致する正規表現^#を使用します。

$ grep ^# /etc/fstab
# /etc/fstab: static file system information.
#


フルラインレギュラー


^と$は、文字列全体に一致するように組み合わせることができます。 たとえば、次の通常の行は、文字#で始まり、文字 "。"で終わる行に対応します。それらの間の任意の数の文字の場合:



$ grep '^#.*\.$' /etc/fstab
# /etc/fstab: static file system information.


上記の例では、シェルが$文字を解釈しないように、正規表現を単一引用符で囲みました。 一重引用符がないと、grepがそれを見ることができる前に、$が正規から消えます。



継続するには...



著者について


ダニエル・ロビンス


Daniel Robbinsは、Gentooコミュニティの創設者であり、Gentoo Linuxオペレーティングシステムの作成者です。 ダニエルは妻のメアリーと元気な娘2人とニューメキシコに住んでいます。 彼はFuntooの創設者兼代表でもあり、 IBM developerWorks 、Intel Developer Services、およびC / C ++ Users Journalの技術記事を数多く執筆しています。



クリス・ハウザー


クリスハウザーは、1994年にテイラー大学(米国インディアナ州)の管理者チームに参加し、コンピューターサイエンスと数学の学士号を取得して以来、UNIXの支持者でした。 その後、Webアプリケーション、ビデオ編集、UNIXドライバー、暗号化保護など、さまざまな分野で働きました。 現在、Sentry Data Systemsで働いています。 Chrisは、Gentoo LinuxやClojureなどの多くの無料プロジェクトにも貢献し、 The Joy of Clojureの共同執筆者でもあります。



アロン・グリフィス


Iron Griffisはボストンに住んでおり、ここ10年間、Hewlett-PackardでTru64、Linux、Xen、KVM仮想化セキュリティ認証用のUNIXネットワークドライバー、最近ではHP ePrintプラットフォームなどのプロジェクトに従事しました。 プログラミングの暇な時間に、Ayronは、自転車に乗ったり、ビットをジャグリングしたり、ボストンのプロ野球チームRed Socksを応援したりする際に、プログラミングの問題を消し去ることを好みます。

Source: https://habr.com/ru/post/J102442/


All Articles