>  기사  >  운영 및 유지보수  >  Linux에서 와일드카드 및 정규식에 대한 자세한 설명(그림)

Linux에서 와일드카드 및 정규식에 대한 자세한 설명(그림)

黄舟
黄舟원래의
2017-05-27 10:23:561974검색

Regularexpression은 파일의 정규화된 string과 일치합니다. 이번 글에서는 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

2. 세 개의 연속 숫자가 포함된 행 일치

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

3. r로 시작하고 n

[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

으로 끝납니다. 4. 필터

ifconfig, Intercept ipgrep -v는 역방향 차단을 나타냅니다. 특정 키워드가 있는 줄을 제거한다는 의미 sed는 교체를 의미합니다

 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

오해여기서 오해가 있습니다. 오랫동안 이것이 정규식과 와일드카드의 차이점입니다

와일드카드의 *는 모든 문자를 나타내며 정규식의 *는 이전 문자와 일치할 수 있습니다. >= 0회

이 둘은 완전히 다른데 내가 사용하는 *가 와일드카드인지 정규식인지 어떻게 알 수 있나요

처음에는 오해에 빠졌습니다. 아래를 참조하세요. 명령

[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

grep 'a*c'와 grep '^a*c$'의 결과가 다른 이유는 무엇입니까? a*c가 4개를 표시하기 때문에 하나는 와일드카드이고 다른 하나는 정규 표현식이라고 생각했습니다. 결과적으로

는 여러 문자와 일치하지 않습니까?

는 실제로는 그렇지 않습니다.

와일드카드의 역할은

파일 이름의 정규 표현식입니다. 공식은

파일의 정규화된 문자열을 일치시키는 것입니다. 이를 파이프 문자에 전달한 후에는 grep을 사용하여 파일 이름을 일치시킬 수 없습니다. 파일이므로 완전히 정규식입니다

grep 'a*c'는 a>=0과 일치한다는 의미이므로 c가 포함되어 있으면 괜찮습니다

그리고 grep '^a *c$'도 정규 표현식입니다. 즉, a로 시작하고 두 번째 문자는 a와 0회 이상 일치하고 그 뒤에 문자 c

가 옵니다. 따라서 aac와 ac만

이 예를 보세요

[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*b'는 a와 b를 포함한다는 의미가 아니라 a가 0회 이상 반복된 후 b를 포함한다는 의미입니다

위 내용은 Linux에서 와일드카드 및 정규식에 대한 자세한 설명(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.