今回は、Linux での 正規表現 の使用について詳しく説明します。 Linux で正規表現を使用する際の 注意事項 について、実際の事例を見てみましょう。
1. 構成
通常の文字: 通常の文字列、特別な意味なし
特殊文字: 正規表現で特別な意味を持つ
正規表現で一般的なメタ文字[特殊文字]
2. POSIX のメタ文字BRE [基本] および ERE [拡張]
: 通常、(...) などの後続の文字の特別な意味を開くまたは閉じるために使用されます [はエスケープ文字であり、記号の特別な意味を削除します 意味、() 、{} などはシェル内で特別な意味を持っています]
と and の違い:
[root@localhost ~]# cat -n test.txt
1 gd
2 god
3
4 good
5 goood
6 goad
7
8 gboad
2.1, .: 任意の 1 文字と一致します (空にすることはできない null を除く)
[root@localhost ~]# grep -n "." test .txt
1 :gd
2:god
4:good
5:good
6:goad
8:gboad
[root@localhost ~]# grep -n "go.d" test.txt
4:good
6:goad
2.2, : o など、前の文字と何度でも一致します。o は、o なしでも、o が 1 つでも、複数でも構いません
[root@localhost ~]# grep -n "*" test .txt
[root@localhost ~]# grep -n "o*" test.txt
1:gd
2:god
3:
4:good
5:good
6:goad
7:
8:gboad
[root @localhost ~]# echo "gbad" >>test.txt
[root@localhost ~]# echo "pbad" >>test.txt
[root@localhost ~]# echo "kgbad" >> ;test.txt
[root@localhost ~]# echo "poad" >>test.txt
[root@localhost ~]# grep -n "go*" test.txt [o は省略可能、o は前g は一致する必要があります]
1:gd
2:god
4:good
5:good
6:goad
8:gboad
9:gbad
11:kgbad
*2.3, .: 任意の文字と一致 (すべて一致) )、空にすることもできます**
[root@localhost ~]# grep -n ".*" test.txt
1:gd
2:god
3:
4:good
5:good
6:goad
7:
8:gboad
9:gbad
10:pbad
11:kgbad
12:poad
[root@localhost ~]# grep -n "go.*" test.txt
2:god
4:good
5:good
6:goad
[root@localhost ~]# grep -n "po.*" test.txt
12:poad
[root@localhost ~]# echo "pgoad" >>
[root@localhost ~]# grep -n "go.*" test.txt [go に一致した後に任意の文字が存在し、空にすることができます]
2:god
4:good
5:good
6:goad
13: pgoad
[root@localhost ~]#
[root@localhost ~]# grep -n "o.*" test.txt
2:god
4:good
5:good
6:goad
8: gboad
12 :poad
2.4, ^:...
[root@localhost tmp]# grep "^root" /etc/passwd
root:x :0:0:root: で始まる次の正規表現と一致します。 /root:/bin/bash
[root@localhost tmp]#
2.5, $:...で終わる直前の正規表現と一致します
[root@localhost tmp]# grep "bash$" / etc/passwd | head -1
root:x:0:0:root:/root:/bin/bash
[root@localhost tmp]#
^$: 空白行を意味します 意味
"#|^$": #
2.6 で始まるコメント行と空白行に一致します。 []: 角かっこ
内の任意の文字に一致します ([sS] など、 s に一致、または S に一致します)。ハイフン (-) を使用して指定できます。ハイフンの範囲 ([(0-9)] など、0 ~ 9 の任意の文字と一致します); [^0-9] 最初の角括弧の位置に ^ 記号が表示されている場合は、そこに含まれていない任意の文字と一致することを意味します。リスト。
[root@localhost tmp]# 猫ホスト
192.168.200.1
192.168.200.3
a.b.123.5
23.c.56.1
1456.1.2.4
12.4.5.6.8
[root@localhost tmp] ] # grep -E ' ([0-9]{1,3}.){3}[0-9]{1,3}' ホスト
192.168.200.1
192.168.200.3
1456.1.2.4
12.4.5.6.8
[root@ localhost tmp]# grep -E '^([0-9]{1,3}.){3}[0-9]{1,3}$' ホスト
192.168.200.1
192.168.200.3
[root@ localhost tmp]#
2.7, ?: 前の文字と 0 回以上一致
[root@localhost ~]# grep -E "go?d" test.txt
gd
god
[root@localhost ~]#
[root@localhost tmp]# cat test
do
does
doxy
[root@localhost tmp]# grep -E "do(es)?" テスト
do
does
doxy
[root@localhost tmp ]#
3. POSIX BRE のみの文字 (Basic Regular)
{n,m}: 間隔式、再現するためにその前の 1 文字と一致します [繰り返し、次の 1 文字は https{0, 1}、つまり s を 0 ~ 1 回繰り返します。 {n} は n 回のマッチングを意味し、{n,m} は n ~ m 回のマッチングを意味し、{n,} は少なくとも n 回のマッチングを意味し、{,m} は最大 m 回のマッチングを意味します。 [エスケープ文字]
4、POSIX ERE (Extended Regular) のみの文字
4.1、{n,m}: BRE の {n,m} と同じ機能
[root@localhost tmp ]# grep -E '^([0-9]{1,3}.){3}[0-9]{1,3}$' ホスト
192.168.200.1
192.168.200.3
4.2 , +:前の正規表現と 1 回以上一致します
[root@localhost ~]# egrep "go+d" test.txt
god
good
good
[root@localhost ~]#
4.3 , |:複数の文字列 [または関係] の一致を示します
[root@localhost ~]# grep -E "3306|1521" /etc/services
mysql 3306/tcp # MySQL
mysql 3306/udp
ncube-lm 1521/tcp # nCube License Manager
ncube-lm 1521/udp # nCube License Manager
[root@localhost ~]#
4.4, ( ) :グループフィルタリング、バックリファレンス
グループフィルタリング
( ) 前の一致部分の場合括弧を使用すると、最初の括弧の内容が後の部分で 1 として出力されます。[root@localhost ~] # echo "glad" >> test.txt
[root@localhost ~]# egrep "(la|oo)" test.txt
good
good
[root@localhost tmp]# ifconfig |sed -rn 's#.*addr:(.*)(B.*)$#1#gp'5.1、b: 単語の境界に一致する192.168.4.27
[root@localhost tmp]# cat test testdoxydo
does
[root@localhost tmp]# grep "bdo" test
do
does
doxy
[ root@localhost tmp]# grep "bdoes" test
does
[root@localhost tmp]# grep "bdob" test
do
[root@localhost tmp]#
5.2 B: 単語以外の境界を一致させます。 to b
[root@localhost tmp]# grep "doB" test
agdoeg
[root@localhost tmp]# grep "dob" testdo[root@localhost tmp]#
5.3、d: [0-9]
5.4 に相当する数字と一致します。D: [^0-9]
5.5 に相当する非数字文字と一致します。w: 文字と数字と一致します。 [A-Za-z0-9_] に相当するアンダースコア
多くのメタキャラクターがあるため、ここではすべてをリストしません
ケース: 起動の効率化
[root@localhost ~]# chkconfig --list | egrep -v "crond|network|rsyslog|sshd|sysstat" | awk '{print "chkconfig",$1,"off"}'|bash
この記事の事例を読んだ後は、この方法を習得したと思います。 php 中国語 Web サイトの他の関連記事にも注目してください。
推奨読書:
以上がLinuxでの正規表現の使い方を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。