ホームページ >運用・保守 >Linuxの運用と保守 >Linux でのワイルドカードと正規表現

Linux でのワイルドカードと正規表現

巴扎黑
巴扎黑オリジナル
2017-06-16 10:39:361817ブラウズ

正規表現は、ファイル内の修飾された文字列と一致します。この記事では、Linux でのワイルドカードと正規表現を紹介しますので、必要な方は参考にしてください

ワイルドカード

* 任意の文字を複数回繰り返すことができます
? [] は を表します。文字

例: [a,b,c] は、abc の任意の

ワイルドカードを表します。 ワイルドカードの役割は、ファイル名と一致することです。

正規表現は、ファイル名と一致することです。条件付き文字列ls find cpは正規表現をサポートしていません

が、grep awk sedは正規表現をサポートしています

[root@hadoop-bigdata01 test]# touch aa

[root@hadoop-bigdata01 test]# touch aab aabb

[root@hadoop-bigdata01 test]# ll

total 0

-rw-r--r-- 1 root root 0 May 16 19:47 aa

-rw-r--r-- 1 root root 0 May 16 19 :47 aab
-rw-r--r-- 1 root root 0 May 16 19:47 aabb
[root@hadoop-bigdata01 test]# ls aa
aa
[root@hadoop-bigdata01 test] # ls aa?
aab
[root@hadoop-bigdata01 test]# ls aa*
aa aab aabb

正規表現の特殊文字


正規表現の一致範囲

正規表現の標準文字

定期的な式

 grep "1" /etc/passwd

キーワード 1 を含む行、grep にはそれを含める必要があります。ワイルドカードは不要です。完全に一貫性が必要です


[root@hadoop-bigdata01 test]# grep "1" /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
wang:x:501:501::/home/wang:/bin/bash
grep 'root' /etc/passwd
cat /etc/passwd | grep 'root'

同じことですが、パイプ文字の方が煩わしいです

それでは

1. 数字を含むマッチライン

  grep '[0-9]' /etc/passwd


 grep '[0-9][0-9][0-9]' /etc/passwd      或者  grep ':[0-9][0-9][0-9]:' /etc/passwd


3. 数字を含むマッチライン

[root@hadoop-bigdata01 test]# grep '[0-9][0-9][0-9]' /etc/passwd
games:x:12:100:games:/usr/games:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
abrt:x:173:173::/etc/abrt:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
saslauth:x:498:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
pulse:x:497:496:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
liucheng:x:500:500::/home/liucheng:/bin/bash
wang:x:501:501::/home/wang:/bin/bas

3. n 行


 grep '^r.*n$' /etc/passwd
.*代表所有
[root@hadoop-bigdata01 test]# grep '^r.*n$' /etc/passwd        
rpc:x:32:32:Rpcbind Daemon:/var/cache/rpcbind:/sbin/nologin
rtkit:x:499:497:RealtimeKit:/proc:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

4. ifconfig をフィルターし、ip


grep -v はリバースインターセプトを表し、特定のキーワードを持つ行を削除することを意味します sed は置換の意味を持ちます

[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:'
     inet addr:192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
     inet addr:127.0.0.1 Mask:255.0.0.0
[root@hadoop-bigdata01 test]# 
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1'
     inet addr:192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | sed 's/inet addr://g'
     192.168.126.191 Bcast:192.168.126.255 Mask:255.255.255.0
[root@hadoop-bigdata01 test]# ifconfig | grep 'inet addr:' | grep -v '127.0.0.1' | sed 's/inet addr://g' | sed 's/Bcast.*//g'
     192.168.126.191

誤解

ここで私は長い間考えてきましたが、それは正規表現とワイルドカードの違いですワイルドカードの * は繰り返し可能な任意の文字を指すことはわかっています。正規表現の * は、前の文字と 0 回以上一致することを指します

これら 2 つはまったく異なるものなので、使用した * がワイルドカードであるか正規表現であるかをどうやって確認すればよいですか

誤解に陥ったので、次の一連のコマンドを見てください

[root@hadoop-bigdata01 test]# touch ac aac abc abbc
[root@hadoop-bigdata01 test]# ll
total 0
-rw-r--r-- 1 root root 0 May 16 19:55 aac
-rw-r--r-- 1 root root 0 May 16 19:55 abbc
-rw-r--r-- 1 root root 0 May 16 19:55 abc
-rw-r--r-- 1 root root 0 May 16 19:55 ac
[root@hadoop-bigdata01 test]# ls | grep 'a*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep 'a.*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep '^a.*c'
aac
abbc
abc
ac
[root@hadoop-bigdata01 test]# ls | grep '^a*c' 
aac
ac

grep の理由 'a*c' と grep '^a*c$' の結果は異なります。一方はワイルドカードであり、もう一方は異なるものだと思いました。は正規表現です。a*c によって表示される 4 つの結果は、任意の数の文字に偶然一致するからです。

実際にはそうではありません

ワイルドカードの役割はファイル名を一致させることです

正規表現は一致するために使用されます。ファイル内の修飾文字列

パイプ文字に渡した後に grep を使用すると、ファイル名と一致しなくなりました。これはファイルに対する操作であるため、完全に正規表現です

grep 'a*c' は a>=0 と一致することを意味します。 , したがって、c が含まれている限り、OKです

そして grep '^a*c$ ' も正規表現です。つまり、a で始まり、2 番目の文字が 0 回以上一致し、その後に文字が続きます。 c

、つまり、aac と ac だけが条件を満たします

それでは、この例を見てください

[root@hadoop-bigdata01 test]# ls
a aac abb abbc abc ac b bb c cb
[root@hadoop-bigdata01 test]# ls | grep 'a*b'
abb
abbc
abc
b
bb
cb

ここで grep 'a*b' は、a と b が含まれていることを意味するのではなく、a が 0 回以上繰り返されることを意味します

上記は、編集者が導入した Linux でのワイルドカードと正規表現です。ご質問があれば、メッセージを残してください。編集者が返信します。時間。また、スクリプト ハウス Web サイトをサポートしていただきありがとうございます。

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

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