12. Shell 의 정규 표현 식 + 요약 + 사례

13595 단어 Shell
학습 노트
정규 표현 식 이 무엇 입 니까?
문자 모드 줄 임 말 RE 는 지정 한 문 자 를 찾 는 데 사 용 됩 니 다. 많은 프로 그래 밍 언어 는 정규 표현 식 을 지원 합 니 다. 문자열 작업 정규 표현 식 개념 은 유 닉 스 의 도구 소프트웨어 에서 최초 로 보급 되 었 습 니 다. 예 를 들 어 sed grep 정규 표현 식 을 지원 하 는 프로그램 입 니 다. locate find vim grep sed awk뭐 공부 해요?
메 일 박스 일치 주민등록번호 핸드폰 번호 은행 카드 일치 특정 문자열 특정 처리
정규 중의 명사 해석.
  • 원 문 자 는 정규 표현 식 에서 특별한 의 미 를 가 진 전용 문 자 를 말 합 니 다. 예 를 들 어 점. 별 * 물음표?등
  • 선도 문자
  • 원 문자 앞 에 있 는 문자 ab c * ao o.
    첫 번 째 정규 표현 식
  • 일반 상용 문자
  • .	匹配除了换行符以外的任意单个字符
    *	前导字符出现0次或者连续多次
    .*	任意长度字符
    ^	行首 以..开头
    $	行尾 以..结尾
    ^$	空行
    []	匹配括号里任意单个字符或一组单个字符	
    [^]	匹配不包含括号内任一单个字符或者一组单个字符
    ^[]	匹配以括号里任意单个字符或一组单个字符开头
    ^[^]	匹配不以括号里任意单个字符或一组单个字符开头
    ################################################
    grep 'g.' 1.txt
    匹配包含g和后所跟任意单个字符的行 (grep 行过滤)
    grep 'go*' 1.txt
    匹配g和o0个或多个的行
    grep 'go.*' 1.txt
    匹配go和后面任意长度字符的行
    grep '^gel' 1.txt
    匹配以gel开头的行
    grep 'abc$' 1.txt
    匹配以abc结尾的行
    grep '^[abc]' 1.txt
    匹配以a或b或c开头的
    grep '^[abc]' 1.txt
    匹配不以a或b或c开头的
    
  • 기타 상용 문자
  • \<	取单词的头
    \>	取单词的尾
    \<\>	精确匹配
    \{n\}	匹配前导字符连续出现n次
    \{n,\}	匹配前导字符至少出现n次
    \{n,m\}	匹配前导字符出现n次与m次之间
    \(\)	保存被匹配的字符
    \d	匹配数字 grep -P  要加P		[0-9]
    \w	匹配字母数字下划线 grep -P 要加P		[a-zA-Z0-9_]
    \s	匹配空格 制表符 换页符 grep -P 要加P		[\t\r
    ] ############################################## grep '\ 1.txt 匹配里面单词以hel为头 grep 'rld\>' 1.txt 匹配里面单词以rld为尾 #匹配内容里单词的头或尾 不是单词不匹配 grep '\' 1.txt 精确匹配hello这个单词 注意是单词 grep -w hello 1.txt 和这个精确匹配差不多 grep 'go\{2\}' 1.txt 匹配g和前导字符o连续出现2次的 grep 'go\{2,\}' 1.txt 匹配g和前导字符o至少出现2次 grep 'go\{2,4\}' 1.txt 匹配g和前导字符o出现2-4次 grep '[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{1\}\.[0-9]\{1\}' 1.txt 匹配ip 192.168.0.1 [0-9]表示数字 3 3 1 1 出现次数 \. 转义. vim :%S/10.10.1.1/10.10.1.2/g :%s/\(10.10.1\).1/\1.254/g :%s/helloworld yourself/hiworld myself/g :%s/hello\(world \)your\(self\)/hi\1my\2/g 只替换掉不同的部分
  • 확장 클래스 정규 상용 문자 가 특수 합 니 다. 예 를 들 어 grep 추가 -E 또는 사용 egrep sed 을 사용 하려 면 추가 -r
  • 를 사용 해 야 합 니 다.
    +	匹配一个或多个前导字符	grep -E bo+ 匹配boo,bo
    ?	匹配零个或一个前导字符	grep -E bo? 匹配b,bo
    |grep -E a|b
    ()	组字符 看成整体 grep -E (my|your)self 匹配myself或yourself
    {n}	前导字符重复n次
    {n,}	前导字符重复至少n次
    {n,m}	前导字符重复n到m次
    

    제2 류 정규
    [:alnum:]	字母与数字字符		[[:alunm:]]+
    [:alpha:]	字符字符(包括大小写)		[[:alpha:]]{4}
    [:blank:]	空格与制表符	[[:blank:]]*
    [:digit:]	数字		[[:digit:]]?
    [:lower:]	小写字母		[[:lower:]]{4,}
    [:upper:]	大写字母		[[:upper:]]+  [A-Z]
    [:punct:]	标点符号		[[:punct:]]
    [:space:]	包括换行符,回车在内的所有空白		[[:space:]]+
    grep -E [[:alunm:]]+
    

    정규 표현 식 총화
  • 1. 뭘 찾 으 려 고
  • 找数字	[0-9]
    找字母	[a-zA-Z]
    找标点符号	[[:punct:]]
    
  • 2. 어떻게 찾 아야 하나 요
  • 以什么为首		^key
    以什么为结尾		key$
    包含什么或者不包含什么		[abc] ^[abc][^abc]^[^abc]
    
  • 3. 얼마나 찾 아야 합 니까
  • 找前导字符出现0次或连续多次		ab*
    找任意单个字符		ab.
    找任意字符		ab.*
    找前导字符连续出现几次		{n} {n,} {n,m}
    找前导字符出现1次或者多次	 go+
    
    1.1.1.1
    [0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}
    ([0-9]{1,3}\.){3}[0-9]{1,3}
    \d+\.\d+\.\d+\.\d+
    (\d+\.){3}\d+
    

    케이스
    1.查找不以大写字母开头的行
    grep '^[^A-Z]'
    grep -v '^[A-Z]'
    grep '^[^[:upper:]]'
    2.查找所有数字的行
    grep [0-9]
    grep -P '\d'
    3.查找一个数字和在一个字母连起来
    grep -E '[0-9][a-zA-Z]|[a-zA-Z][0-9]'
    4.查找不以r开头的行
    grep -v '^r'
    5.查找以数字开头的行
    grep '^[0-9]'
    6.查找以大写字母开头的
    grep '^[A-Z]'
    7.查找以小写字母开头的
    grep '^[a-z]'
    8.查找以点结束的
    grep '\.$'
    9.去掉空行
    grep -v '^$'
    10.查找完全匹配abc的行
    grep '\'
    grep -w 'abc'
    11.查找A后面有3个数字的行
    grep 'A[0-9]{3}'
    12.统计root在/etc/passwd出现几次 -o 只显示匹配项
    grep -o 'root' /etc/passwd | wc -l
    13.用正则找出自己的ip地址 广播地址 子网掩码
    ifconfig|grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}'
    14.找出文件中的ip地址并且打印替换为172.16.2.254
    grep -o -E '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt | sed -n 's/192.168.0.\(254\)/172.16.2.\1/p'
    15.找出文件中的ip地址
    grep -oE '([0-9]{1,3}\.){3}[0-9]{1,3}' 1.txt
    16.找出全部是数字的行
    grep -E '^[0-9]+$'
    17.找出邮箱地址
    grep -E '^[0-9a-zA-Z]+@[a-z0-9]+\.[a-z]+$'
    

    좋은 웹페이지 즐겨찾기