ホームページ  >  記事  >  運用・保守  >  正規表現

正規表現

巴扎黑
巴扎黑オリジナル
2017-07-21 10:03:231992ブラウズ

1. 正規表現

1. 一致する文字の種類

  • [a-z]: 小文字

  • [A-Z]: 小文字または大文字

  • [ 0-9]: 数字

  • [a-zA-Z0-9]: 文字または数字の文字と一致します

  • : スペースを除く 1 つの任意の文字と一致します

  • [0 -f ]: 16 進数

  • abc | def: abc または def

  • a (bc | de) f: abcf または adef

  • <: 通常、単語の最初の単語の前にはスペースまたは特殊文字 区切るために、連続する文字列を単語として扱います

  • >: 単語の末尾

  • [^式]: 小文字を除くすべての文字 など。

  • 2. 一致の数を制御するには、次の記号が続きます

  • そのような記号の左側には、上記の最初の点の式が必要です

expression*: 0 または n 文字

  • expression+ : 1 または n 文字

  • 式? : 0 または 1 文字

  • 式 {n} : n 文字

  • 式 {n:m} : n ~ m 文字

  • 式 {n, }: n 文字以上

  • 【例】[a-z]* は 0 個以上の小文字と一致することを意味します

3. 先頭と末尾の一致する文字を制御します

^式: 先頭が一致します

  • Expression$: 末尾は

  • と一致します

  • 2. Linux の 3 つの主要なテキスト処理ツール

1. egrep フィルタリング ツール

grep の拡張版、正規表現を使用できます 式

構文:

egrep - オプション '正規表現' ファイル名

オプション:

-n: 行番号を表示

  • -o: 一致するコンテンツのみを表示

  • -q: サイレントモード、いいえ出力では、実行が成功したかどうか、つまり、目的のコンテンツが除外されたかどうかを判断するために $? を使用する必要があります。

  • -l: 一致した場合は、ファイル名のみが出力されます。通常、 -rl を一緒に使用します。 grep -rl 'root' /etc

  • -A: 一致した場合、一致した行とそれに続く n 行が一緒に出力されます

  • -B: 一致が成功した場合、一致した行とその前の n 行が一緒に出力されます

  • -C: 一致が成功した場合、一致した行とその前後の n 行が出力されます一緒に印刷します

  • --color

  • - c: 一致が成功した場合、一致した行の数を出力します

  • -i: 大文字と小文字を無視します

  • -v: 否定、一致しません

  • -w: 単語の一致

  • 2. sed ストリームエディタ

文法:

構文 1: sed - オプション '数値位置指定 + コマンド' ファイル名

オプション:

-n: サイレント モード、出力なし

  • -e: 複数の編集、これはあまり明確ではありません

  • -i: 出力ではなくファイルの内容を直接変更します

  • -r: 拡張モード、次のことができます正規表現を使用します

  • -f: ファイル名を指定し、新しいファイルにアクションを記述します

  • 配置:

①番号配置(入力行番号配置)

1: 単一行

  • 1,3: 1行目から3行目までの範囲

  • 2,+4: 行以降の数行と一致

  • 4,~3: 4行目から次の倍数まで3

  • 2~3: 2行目 3行おきの行

  • $: 最終行

  • 1!: 1行目以外の行

  • 【例】 sed -n ' 1p' /etc/passwd

②正規表現の配置

正規表現は//でラップする必要があります

  • 拡張正規表現は-rパラメータまたはエスケープで置き換える必要があります

  • の置き換え正規表現を使用できるサブパターン、つまり括弧 () 、 1 、 2 でサブパターンを表すことができます

  • 【例】 sed -r 's/(.)(.)/21/ file1 は置換を意味しますマッチの最初と二番目の部分

*欲張り オプション: g を入力します。これは、行内のすべての一致する項目を置き換えることを意味します

コマンド:

a ∶ append,

  • c ∶ Change、

  • d ∶ delete delete、

  • i ∶ Insert、i の後に文字列を続けることができ、これらの文字列は新しい行 (現在は前の行) に表示されます

  • p∶ print print

  • s∶ 代替品を交換するには、交換作業を直接行うことができます。通常、このアクションは正規表現と組み合わせることができます。例: 1,20s/old/new/g

  • *s コマンドの特別な命令:

複数のコマンドを追加するには、{コマンド 1: コマンド 2: コマンド 3} を使用します s コマンド構文: sed -r 'Replace command s/replace content/greedy option g' ファイル名

3. Awk テキスト分析ツール

は、コマンド、正規表現 (// で囲む必要があります)、比較、関係演算で構成されます

オプションで -F パラメーターを使用して間隔記号を定義します

ファイルの各行のスペーサーで区切られた各列の異なるフィールドを表すには、$1、$2、$3 などの順序を使用します。

構文

awk -オプションパラメータ「論理判定{コマンド変数1、変数2、変数3}」ファイル名

オプション

  • -Fはフィールド区切り文字を定義します、デフォルトの区切り文字は連続スペースまたはタブです

  • -vは可能ですこのメソッドは、シェル変数から導入されます

AWK 変数

  • NR 現在のレコードの数 (すべてのファイルが接続された後の統計)

  • FNR現在のレコードの数 (すべてではなく、現在のファイルのみの統計)

  • FS デフォルトのフィールド区切り文字は、連続したスペースまたはタブです。 -F[:/]

  • OFS出力文字のデフォルトの区切り文字はスペースです

【OFSの例】

# awk -F: 'OFS="=====" {print $1,$2}' /etc/passwd
root=====x

  • NF 現在読み取られている行のフィールド数

  • ORS デフォルトの出力レコード区切り文字は改行です

[ORS の例]

# awk - F: 'ORS="=== ===" {print $1,$2}' /etc/passwd
root x=====bin x=====

  • FILENAME 現在のファイル名

【例1】AWK変数を使用する
# awk '{print NR,FNR,$1}' file1 file2
1 1 aaaaa
2 2 bbbbb
3 3 ccccc
4 1 dddddd
5 2 eeeeee
6 3 ffffff
#

【例2】シェル変数を引用する方法

# a=root
# awk -v var=$a -F : '$1 == var {print $0} ' /etc/passwd
または、コマンド全体を分割してシェル変数を公開するために渡します
# awk -F: '$1 == "'$a'" {print $0} ' /etc/passwd
# a=NF
# awk -F: '{print $'$a'}' /etc/passwd

論理演算 (演算のフィールドを直接参照できます)

  • = += -= /= *=: 代入

  • && || !: 論理 AND 論理または論理 NOT

  • ~ !~: 正規に一致するか一致しない、正規は /正規/ で囲む必要があります

  • < <= > > = != ==: 文字列を比較する場合、文字列は二重引用符で囲む必要があります

  • $: 変数参照は $ で追加する必要があります変数名で直接名前が付けられます

  • + - * / % + + --: 演算子

エスケープシーケンス

  • \ self

  • $エスケープ $

  • tタブ

  • b バックスペース

  • r キャリッジリターン文字

  • n 改行文字

  • c 改行をキャンセル

詳細については、以下を参照してください。


以上が正規表現の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。