正規表現と正規表現を用いたgrep,sed,awkなどのツール
2016 ワード
この文書では、grep sed awkなどのツールのような正規表現と正規表現をサポートするlinuxコマンドについて説明します.また、c++標準ライブラリはstd::regexを提供して正規表現を解析します.「c++標準ライブラリ」を参照してください.1:正規表現正規表現はテキストをバッチ処理するために、いくつかの文字列の特殊なマッチング機能を提供し、一般的なワイルドカードよりも強く柔軟であるが、linux shellのワイルドカードと混同しないように注意しなければならない.ワイルドカードはほとんどのlinux cmdでサポートされている簡単な文字マッチングであるが、正規表現は少数のコマンドサポートしかない.両者のルールも異なり、ワイルドカードは私のlinux shell scriptの文章で紹介されています.ここでは正規表現を紹介し、正規表現は基礎正規表現と強化正規表現に分かれています.grep sed awkなどのツールは基礎正規表現をサポートしており、正規表現の強化をサポートするにはgrep-Eまたはegrepを直接使用する必要があります.まず、基本正規表現1.^について説明します.word:検索する文字列(word)が行頭にあります.
2拡張正規表現1.+:1つ以上の前の文字を繰り返します.
grep -n '^#' ./test
がtestファイルで#で始まる文字列を検索する.word$:検索する文字列(word)が行末にあります.grep -n '#$' ./test
のようにtestファイルで#で終わる文字列3を検索します.代表には必ず任意の文字があります.grep -n 'a.c' ./test
がtestファイルでaで始まり、cで終わり、真ん中に任意の文字の文字列が1つしかないように検索されます.4.:エスケープ文字、検索する文字列に^$などの特殊な意味文字がある場合は、転送文字で5を修飾する必要があります.0~無限の複数の前の文字を繰り返します.前の文字を繰り返し、任意の文字を表すわけではありません.grep -n 'go*' ./test
testファイルでg,go,goo,gooを検索すると....など、注意gも1つで、o*はo 0回から無限回を繰り返すことを表すと考えられています.6.[list]:文字セットから選択する文字を見つけ、[]で検索する文字を表します.grep -n 'g[ld]a' ./test
のようにtestでglaとgdaを検索します.7.[n 1−n 2]:n 1〜n 2の間のすべての文字を表す.grep -n '[0-9]' ./test
がtestで0から9のすべての数字を検索するように、[a-z]8.[^list]:list以外の文字を検索します.grep -n 'oo[^A-Z]' ./test
のようにtestでooの後ろに大文字が付いていない文字を検索します.9.{n,m}:nからmの前の文字まで連続し、{n}の場合、nの前の文字を識別し、{n,}の場合、n以上の前の文字を表す.{}は特殊文字なので、エスケープ文字修飾が必要です.たとえば、grep -n 'go\{2,3\}g' ./test
はtestでgoog googという2つの文字列を検索します.2拡張正規表現1.+:1つ以上の前の文字を繰り返します.
egrep -n 'go+d' ./test
はtestでgod,good,good...などを検索します.2. ? : ゼロまたは1つ前の文字.egrep -n 'go?d' ./test
がtestでgdを検索する場合、god文字3.|:or(または)で数文字列を見つけます.例えばegrep -n 'gd|good' ./test
はtestファイルの中でgdとgoodの2つの文字を探します.():()で選択可能なリストを指定します.egrep -n 'g(la|oo)d' ./test
のようにtestでgladとgoodの2つの文字列を検索する.()+:複数の重複グループの判別.例えば、egrep -n 'A(xyz)+C' ./test
はtestでAで始まり、Cで終わり、中間にxyz以上の文字列があることを検索します.