>  기사  >  운영 및 유지보수  >  Linux의 와일드카드 및 정규식

Linux의 와일드카드 및 정규식

巴扎黑
巴扎黑원래의
2017-06-16 10:39:361799검색

정규식은 파일의 정규화된 문자열과 일치합니다. 이 글에서는 Linux에서 와일드카드와 정규 표현식을 소개합니다. 필요한 친구는 이를 참조할 수 있습니다.

Wildcards

* 모든 문자, 여러 번 반복 가능
? 모든 문자, 한 번 반복됨
문자

예: [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 테스트]# ll
total 0
-rw-r--r-- 1 루트 루트 0 5월 16일 19:47 aa
-rw-r--r-- 1 루트 루트 0 5월 16일 19: 47 aab
-rw-r--r-- 1 루트 루트 0 5월 16일 19:47 aabb
[root@hadoop-bigdata01 test]# ls aa
aa
[root@hadoop-bigdata01 test] # ls aa?
aaboop [root@hadoop-bigdata01 test]# ls aa*aa*
aa aab aabb

reporexulary 특수 문자

작 표현식 표준 문자 일치 정기 표준 표준 표현식

 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


[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. 라인


 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는 역방향 가로채기를 나타냅니다. 이는 특정 키워드로 라인을 제거한다는 의미입니다. sed는 교체라는 의미를 가집니다

[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번 일치를 의미합니다

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

처음에는 떨어졌습니다. 오해를 풀려면 다음 일련의 명령을 보세요

[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에 의해 표시되는 네 개의 결과는 임의 개수의 문자와 일치하기 때문에 정규 표현식입니다. ?

사실 그렇지 않습니다.

와일드카드의 역할은 파일 이름을 일치시키는 것입니다

정규 표현식은 일치하는 데 사용됩니다. 파일의 정규화된 문자열

grep을 파이프 문자에 전달한 후 사용하면 더 이상 파일 이름과 일치하지 않습니다. 이는 파일에 대한 작업이므로 완전히 정규식입니다.

grep 'a*c'는 a>=0 일치를 의미합니다. , c가 포함되어 있으면 괜찮습니다

그리고 grep '^a*c$'도 정규식이므로 a로 시작하고 두 번째 문자가 0번 이상 일치하고 그 뒤에 문자 c

, 따라서 aac와 ac만 조건을 충족합니다

이 예를 보세요

[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 또는 0으로 반복된다는 의미입니다. more times and then contain b

위 내용은 편집자가 소개한 Linux에서의 와일드카드와 정규식입니다. 질문이 있는 경우 메시지를 남겨주시면 편집자가 답변해 드리겠습니다. 시간에. 또한 Script House 웹사이트를 지원해 주시는 모든 분들께 감사의 말씀을 전하고 싶습니다!

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

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