정규식은 파일의 정규화된 문자열과 일치합니다. 이 글에서는 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
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/passwd2. 세 개의 연속 숫자가 포함된 행 일치
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을 파이프 문자에 전달한 후 사용하면 더 이상 파일 이름과 일치하지 않습니다. 이는 파일에 대한 작업이므로 완전히 정규식입니다.
[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 중국어 웹사이트의 기타 관련 기사를 참조하세요!