Regularexpression は、ファイル内の修飾された strings と一致するために使用されます。この記事では、linux の ワイルドカード と正規表現を紹介します。必要な友達は参照してください
ワイルドカード
* 任意の文字を複数回繰り返すことができます
?一度
[]は文字を表します
例:[a,b,c]はabcのいずれかを表します
ワイルドカードの役割はファイル名と一致することです
正規表現
正規表現は
ファイル内の修飾文字列に一致する 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
正規表現特殊文字
Range に一致する正規表現
Regular式の標準文字
正規表現を使用してください
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
2. 3 つの連続する数字を含む行に一致
rreee3. r で始まり n で終わる行に一致します
grep -v は逆インターセプトを表し、特定のキーワードを含む行を削除することを意味します sed は置換を意味しますgrep '[0-9][0-9][0-9]' /etc/passwd 或者 grep ':[0-9][0-9][0-9]:' /etc/passwd
誤解
ここで誤解があります、少し考えた後長い間、それは正規表現とワイルドカードの違いです ワイルドカードの * は任意の文字を指し、複数回繰り返すことができることはわかっています 正規表現の * は、前の文字と 0 回以上一致することを指します。この 2 つはまったく異なります。では、使用する * がワイルドカードなのか正規表現なのかをどうやって知ることができるのでしょうか。最初は誤解しました。次の一連のコマンドを見てください[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 'a*c' するのでしょうか?と grep '^a*c $' の結果は異なります。a*c で表示される 4 つの結果は正確に一致するため、1 つはワイルドカードで、もう 1 つは正規表現だと思います。 実際にはそうではありませんワイルドカードの役割は、ファイル名を一致させるために使用される正規表現をパイプ文字に渡した後に使用することですはファイル名と一致しなくなり、ファイルに対する操作なので完全に正規表現ですgrep 'a*c' は a>=0 と一致することを意味するので、c が含まれていればOKですそして、grep '^a*c$' も正規表現です。つまり、a で始まり、2 番目の文字が 0 回以上一致し、その後に文字 c が続きますつまり、aac と ac のみが条件を満たしますこの例を見てください
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ここで grep 'a*b' は a と a b を参照していません。代わりに、a が 0 回以上繰り返され、b が含まれています
以上がLinuxにおけるワイルドカードと正規表現の詳しい説明(写真)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。