ホームページ >運用・保守 >Linuxの運用と保守 >Linux でのワイルドカードと正規表現
正規表現は、ファイル内の修飾された文字列と一致します。この記事では、Linux でのワイルドカードと正規表現を紹介しますので、必要な方は参考にしてください
ワイルドカード
* 任意の文字を複数回繰り返すことができます
? [] は を表します。文字
正規表現は、ファイル名と一致することです。条件付き文字列ls find cpは正規表現をサポートしていません
が、grep awk sedは正規表現をサポートしています[root@hadoop-bigdata01 test]# touch aa[root@hadoop-bigdata01 test]# touch aab aabb
[root@hadoop-bigdata01 test]# lltotal 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'
同じことですが、パイプ文字の方が煩わしいです
それでは
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
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
[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 つの結果は、任意の数の文字に偶然一致するからです。
実際にはそうではありません
[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 サイトの他の関連記事を参照してください。