Regularexpression은 파일의 정규화된 string과 일치합니다. 이번 글에서는 linux의 와일드카드와 정규표현식을 소개하겠습니다. 필요한 친구들은
와일드카드를 참고하세요. 🎜>
* 모든 문자, 여러 번 반복 가능 ? 모든 문자, 한 번 반복
[]는 문자를 나타냄
정규식
정규식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/passwdrrree3. 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
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!