Home>Article>Operation and Maintenance> Detailed explanation of wildcards and regular expressions under Linux (picture)

Detailed explanation of wildcards and regular expressions under Linux (picture)

黄舟
黄舟 Original
2017-05-27 10:23:56 1919browse

Regularexpressionmatches the qualifiedstringin the file. This article will introduce to you thewildcardand regular expressions underlinux. Friends who need it can refer to it

wildcard

* Any character, can be repeated multiple times
? Any character, repeated once
[] represents one character

Example: [a,b,c] represents The role of any

wildcard in abc is to match the

regular expression

regular expression used to match the file name It is used to match qualified strings in files

ls find cp does not support regular expressions

But grep awk sed supports regular expressions

[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

regular expressions FormulaSpecial characters

Regular expression matching range

Regular expression standard characters

##Use regular expressions

grep "1" /etc/passwd

The line containing keyword 1, grep only needs to contain it, no wildcards are needed, it must be completely consistent

[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'

The same principle applies, but the pipe character consumes more resources

So

1. Match lines containing numbers

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

2. Match lines containing three consecutive numbers

grep '[0-9][0-9][0-9]' /etc/passwd 或者 grep ':[0-9][0-9][0-9]:' /etc/passwd
[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. Match lines starting with r and ending with 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. Filterifconfig and intercept ip

grep -v represents reverse interception, which means to remove lines with a certain keyword sed means replacement

[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

Misunderstanding

There is a misunderstanding here. I have been thinking about it for a long time. It is the difference between regular expressions and wildcards.

We know that the * in wildcards refers to any character, and the * in regular expressions that can be repeated multiple times refers to Match the previous character >= 0 times

These two are completely different, so how do I know whether the * I use is a wildcard or a regular expression

At first I fell into a misunderstanding, see below This string of commands

[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

Why are the results of grep 'a*c' and grep '^a*c$' different? I thought one was a wildcard and the other was a regular expression, because a*c displays four As a result, doesn’t

just match any number of characters?

Actually, it is not the case. The function of

wildcard is to match the

regular expression of the file name. The formula is to match the qualified string in the file.

After passing it to the pipe character, using grep is no longer to match the file name. This is an operation on the file, so it is completely a regular expression.

grep 'a*c' means matching a>=0, so as long as it contains c, it is OK

And grep '^a*c$' is also a regular expression, which means it starts with a , and the second character matches a zero or more times, followed by the letter c

, so only aac and ac meet the conditions

So look at this example

[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

Here grep 'a*b' does not mean that it contains a and b, but that a is repeated 0 or more times and then contains b

The above is the detailed content of Detailed explanation of wildcards and regular expressions under Linux (picture). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn