[LINUX] REGULAR EXPRESSION

μ„±μž₯일기·2024λ…„ 7μ›” 10일

[SWCAMP] LINUX

λͺ©λ‘ 보기
7/7

grep

πŸ’‘ λ¦¬λˆ…μŠ€λ₯Ό μ‚¬μš©ν•˜λ‹€ 보면 νŠΉμ • λ¬Έμžλ‚˜ νŒ¨ν„΄μ„ κ²€μƒ‰ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•œλ‹€. 그럴 λ•Œ grep λͺ…λ Ήμ–΄λ₯Ό ν™œμš©ν•  수 μžˆλ‹€.
(grep은 global, regular expression, printμ—μ„œ 각각의 λ¨Έλ¦ΏκΈ€μžλ₯Ό λ”° 온 것이닀.)

$ grep [μ˜΅μ…˜] [νŒ¨ν„΄] [파일λͺ…]
  • grep μ˜΅μ…˜

    μ˜΅μ…˜λ™μž‘μ„€λͺ…
    -b검색 결과의 각 ν–‰ μ•žμ— κ²€μƒ‰λœ μœ„μΉ˜μ˜ 블둝 번호(λ””μŠ€ν¬ μœ„μΉ˜) 확인
    -cμΌμΉ˜ν•˜λŠ” ν–‰μ˜ 수 좜λ ₯
    -h파일 이름 좜λ ₯ μ•ˆν•¨
    -iλŒ€μ†Œλ¬Έμž κ΅¬λΆ„ν•˜μ§€ μ•ŠμŒ
    -I (λŒ€λ¬Έμž i)λŒ€μ†Œλ¬Έμž ꡬ뢄함
    -l (μ†Œλ¬Έμž L)νŒ¨ν„΄μ΄ ν¬ν•¨λœ 파일의 μ΄λ¦„λ§Œ 좜λ ₯
    -nνŒ¨ν„΄μ΄ ν¬ν•¨λœ ν–‰ 번호 ν•¨κ»˜ 좜λ ₯
    -sμ—λŸ¬ λ©”μ‹œμ§€ μ™Έμ—λŠ” 좜λ ₯ν•˜μ§€ μ•ŠμŒ
    -vνŒ¨ν„΄κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” ν–‰λ§Œ 좜λ ₯
    -w단어와 μΌμΉ˜ν•˜λŠ” ν–‰λ§Œ 좜λ ₯
    -x라인과 μΌμΉ˜ν•˜λŠ” ν–‰λ§Œ 좜λ ₯
    -rν•˜μœ„ 디렉토리 ν¬ν•¨ν•œ λͺ¨λ“  νŒŒμΌμ—μ„œ 검색
    -m μˆ«μžμ΅œλŒ€λ‘œ ν‘œμ‹œλ  수 μžˆλŠ” κ²°κ³Όλ₯Ό μ œν•œν•¨
    -E찾을 νŒ¨ν„΄μ„ μ •κ·œ ν‘œν˜„μ‹μœΌλ‘œ 찾음
    -F찾을 νŒ¨ν„΄μ„ λ¬Έμžμ—΄λ‘œ 찾음
  • μ—°μŠ΅μš© text(regexTest.txt)

    y
    z
    1
    2
    3
    a.c
    ac
    abc
    abc
    abbc
    abbbc
    abbbc
    aa
    aa
    aaa
    aaaa
    Abc
    a
    aBc
    aa
    ABC
    abc
    b123c
    b32a
    (def) abc
    abc
    def
    abcdef
    defabc
  • λ¬Έμžμ—΄ abcλ₯Ό ν¬ν•¨ν•˜λŠ” ν–‰ 좜λ ₯

    $ grep abc test.txt


  • 검색 κ²°κ³Όλ₯Ό ν–‰ λ²ˆν˜Έμ™€ 같이 좜λ ₯

    $ grep -n abc test.txt


  • λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜μ§€ μ•Šκ³  검색

    $ grep -ni abc test.txt


λ¦¬λˆ…μŠ€ μ •κ·œν‘œν˜„μ‹

πŸ’‘ λ¬Έμžμ—΄ 검색에 μ •κ·œν‘œν˜„μ‹μ„ μ‚¬μš©ν•˜κ²Œ 되면 쑰건에 μΌμΉ˜ν•˜λŠ” λ¬Έμžμ—΄ 집합을 ν‘œν˜„ν•˜κ³  μ™„μ „νžˆ β€˜λ™μΌβ€™ν•˜μ§€ μ•Šμ€ 값도 κ²€μƒ‰ν•΄μ„œ ν‘œν˜„ν•  수 μžˆλ‹€.

ν™•μž₯ μ •κ·œ ν‘œν˜„μ‹μ€ β€˜-E’ μ˜΅μ…˜μ„ μΆ”κ°€ν•΄ μ£Όμ–΄μ•Ό ν•œλ‹€.

  • λ¦¬λˆ…μŠ€μ˜ 메타 문자

    메타 문자: 문자 νŒ¨ν„΄μ„ ν‘œκΈ°ν•˜κΈ° μœ„ν•œ κ·œμΉ™ 문법에 ν•΄λ‹Ήν•˜λŠ” 문자

    • μž„μ˜μ˜ λ¬Έμžμ— λŒ€ν•œ 메타 문자

      메타 문자의미
      .μž„μ˜μ˜ 문자 ν•˜λ‚˜
      [][] μ•ˆμ— ν¬ν•¨λœ μž„μ˜μ˜ 문자 ν•˜λ‚˜
      [^][] μ•ˆμ— ν¬ν•¨λ˜μ§€ μ•ŠλŠ” 문자
      \ \ λ‹€μŒμ˜ 문자λ₯Ό 메타 문자둜 인식함
    • μœ„μΉ˜ μ§€μ • 메타 문자

      λ©”νƒ€λ¬Έμžμ˜λ―Έ
      ^λ¬Έμžμ—΄μ˜ μ‹œμž‘μ„ λ‚˜νƒ€λƒ„
      $λ¬Έμžμ—΄μ˜ 끝을 λ‚˜νƒ€λƒ„
    • 반볡 횟수λ₯Ό μ§€μ •ν•˜λŠ” 메타 문자

      κΈ°λ³Έ μ •κ·œ ν‘œν˜„μ‹ν™•μž₯ μ •κ·œ ν‘œν˜„μ‹μ˜λ―Έ
      **μ•žμ˜ 문자 0회 이상 반볡
      μ—†μŒ+μ•žμ˜ 문자 1회 이상 반볡
      μ—†μŒ?μ•žμ˜ 문자 0회 λ˜λŠ” 1회 반볡
      {m,n}{m,n}μ•žμ˜ 문자 m회 이상 n회 μ΄ν•˜ 반볡
      {m}{m}μ•žμ˜ 문자 m회 반볡
      {m,}{m,}μ•žμ˜ 문자 m회 이상 반볡
    • 기타 메타 문자

      κΈ°λ³Έ μ •κ·œ ν‘œν˜„μ‹ν™•μž₯ μ •κ·œ ν‘œν˜„μ‹μ˜λ―Έ
      ()()κ·Έλ£Ήν™”ν•  λ•Œ μ‚¬μš©
      μ—†μŒ
  • μ—°μŠ΅

    • β€˜abc’가 μ •ν™•νžˆ μΌμΉ˜ν•˜λŠ” 라인 및 라인 번호
    	$ grep -n '^abc$' test.txt
    • μ–΄λ–€ ν•˜λ‚˜μ˜ 문자 뒀에 β€˜bc’가 μ˜€λŠ” 라인 및 라인 번호
    	$ grep -n '.bc' test.txt
    • β€˜aβ€™λ‘œ μ‹œμž‘ν•˜κ³  β€˜cβ€™λ‘œ λλ‚˜λŠ” 라인 및 라인 번호
    	$ grep -n '^a.*c$' test.txt
    • β€˜a’ 뒀에 β€˜b’가 μ—†κ±°λ‚˜ μ—¬λŸ¬ 개 있고 κ·Έ 뒀에 β€˜c’가 μ˜€λŠ” 라인 및 라인 번호
    	$ grep -n 'ab*c' test.txt
    • β€˜a’ 뒀에 β€˜b’가 ν•˜λ‚˜ 이상 있고 κ·Έ 뒀에 β€˜c’가 μ˜€λŠ” 라인 및 라인 번호
    	$ grep -nE 'ab+c' test.txt
    • β€˜a’ 둜 μ‹œμž‘ν•˜κ³  μ΄ν›„λ‘œλŠ” β€˜b’가 λ‚˜μ˜€μ§€ μ•ŠλŠ” 라인 및 라인 번호
    	$ grep -nE '^a[^b]*$' test.txt
    • β€˜bβ€™λ‘œ μ‹œμž‘ν•˜κ³  λ‹€μŒμ— μˆ«μžκ°€ μ‘΄μž¬ν•˜λŠ” 라인 및 라인 번호
    	$ grep -nE '^b[0-9]+' test.txt
    • β€˜a’ 뒀에 β€˜b’가 μ •ν™•νžˆ 두 번 λ‚˜μ˜€κ³  β€˜cβ€™λ‘œ λλ‚˜λŠ” 라인 및 라인 번호
    	$ grep -nE 'ab{2}c$' test.txt
profile
μ—”μ§€λ‹ˆμ–΄λ‘œμ˜ μ„±μž₯일지

0개의 λŒ“κΈ€