Home  >  Article  >  Operation and Maintenance  >  Wildcards and regular expressions under linux

Wildcards and regular expressions under linux

巴扎黑
巴扎黑Original
2017-06-16 10:39:361754browse

Regular expressions match qualified strings in files. This article will introduce wildcards and regular expressions under Linux to you. Friends who need it can refer to it

Wildcard

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

Example: [a,b,c] represents any

wildcard in abc

Regular expression used to match file names

Regular expression 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 expression special characters

Regular expression matching range

Regular expression Expression standard characters

Use regular expression


 grep "1" /etc/passwd

Lines containing keyword 1, grep only needs to contain it , do not want wildcards, want to 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'

are the same, 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. Filter ifconfig, Intercept ip

grep -v represents reverse interception, which means to remove the 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

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

We know that the wildcard * refers to Any character can be repeated multiple times. The * in the regular expression refers to matching 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? Formula

At first I fell into a misunderstanding. Look at the following series 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 grep 'a*c' and grep '^a*c$' The results will be different. I thought one was a wildcard and the other was a regular expression, because the four results displayed by a*c happened to be

. Doesn’t it match any number of characters?

is actually not the case.

The wildcard is used to match the file name.

The regular expression is to match the string that meets the conditions in the file.

Use grep after passing it to the pipe character. It's not matching file names, it's an operation on files, so it's completely a regular expression.

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

And grep '^a*c$' is also a regular pattern, 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 refer to a and b but a is repeated 0 or more times and then contains b

. The above are the wildcards and regular expressions under Linux introduced by the editor. I hope it will be helpful to you. If you have any questions, please leave me a message. , the editor will reply to everyone in time. I would also like to thank everyone for your support of the Script House website!

The above is the detailed content of Wildcards and regular expressions under linux. 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