Linux 텍스트 처리 삼 총사: grep, sed, awk

24405 단어 #수송 하 다.

awk, grep, sed 는 Liux 가 텍스트 를 조작 하 는 3 대 이기 로 텍스트 3 검 객 이 라 고 부 르 며 반드시 파악 해 야 할 Liux 명령 중 하나 입 니 다.세 가지 기능 은 모두 텍스트 를 처리 하 는 것 이지 만 중점 은 각각 다 릅 니 다. 그 중에서 awk 기능 이 가장 강하 지만 가장 복잡 합 니 다.grep 는 단순 한 검색 이나 일치 하 는 텍스트 에 더욱 적합 하 며, sed 는 일치 하 는 텍스트 를 편집 하 는 데 더욱 적합 하 며, awk 는 텍스트 를 포맷 하 는 데 더욱 적합 하 며, 텍스트 를 복잡 한 형식 으로 처리 합 니 다.
grep
Linux 시스템 에서 grep 명령 은 강력 한 텍스트 검색 도구 입 니 다. 정규 표현 식 으로 텍스트 를 검색 하고 일치 하 는 줄 을 인쇄 할 수 있 습 니 다.grep 는 전역 정규 표현 식 버 전 을 나타 내 는 Global Regular Expression Print 라 고 합 니 다. 사용 권한 은 모든 사용자 입 니 다.
grep 는 셸 스 크 립 트 에 사용 할 수 있 습 니 다. grep 는 상태 값 을 되 돌려 검색 상 태 를 설명 하기 때 문 입 니 다. 템 플 릿 검색 에 성공 하면 0 으로 되 돌아 갑 니 다. 검색 에 성공 하지 못 하면 1 로 되 돌아 갑 니 다. 검색 한 파일 이 존재 하지 않 으 면 2 로 되 돌아 갑 니 다.우 리 는 이 반환 값 을 이용 하여 자동 화 된 텍스트 처리 작업 을 할 수 있다.
명령 의 기본 형식:
grep [option] pattern file

이 명령 에 익숙 하지 않 더 라 도 대부분의 학생 들 은 프로 세 스 조회 명령 을 사용 한 적 이 있 을 것 이다.
ps -ef|grep xxxx

이것 은 grep 의 기본 적 인 용법 입 니 다. 모든 프로 세 스 에서 어떤 프로 세 스 를 검색 합 니 다.
grep 에서 자주 사용 하 는 매개 변 수 는 다음 과 같 습 니 다.
  • - A: 범례 스타일 에 맞 는 열 을 표시 하 는 것 을 제외 하고 이 줄 뒤의 x 줄 내용 을 표시 합 니 다.
  • - B: 스타일 에 맞 는 줄 을 표시 하 는 것 을 제외 하고 이 줄 이전의 x 줄 내용 을 표시 합 니 다.
  • - C: 스타일 에 맞 는 줄 을 표시 하 는 것 을 제외 하고 이 줄 의 앞 뒤의 x 줄 내용 을 표시 합 니 다.
  • - c: 일치 하 는 줄 수 통계
  • - e: 여러 옵션 간 의 논리 or 관계 실현
  • - E: 확 장 된 정규 표현 식
  • - f 파일 이름: 파일 에서 가 져 오기  PATTERN  일치
  • - F: 해당 fgrep
  • - i -- ignore - case \ # 문자 대소 문자 의 차 이 를 무시 합 니 다.
  • - n: 일치 하 는 줄 번호 표시
  • - o: 일치 하 는 문자열 만 표시
  • - q: 침묵 모드, 어떠한 정보 도 출력 하지 않 음
  • - s: 오류 메시지 가 표시 되 지 않 습 니 다.
  • - v: 보이 지 않 음  pattern  일치 하 는 줄 은 [^] 역방향 일치
  • 에 해당 합 니 다.
  • - w: 단어 전체 일치 

  •  
     앞의 세 개의 A, B, C 매개 변 수 는 쉽게 이해 할 수 있 습 니 다. 밤 을 들 어 우리 가 파일 이 있다 고 가정 하면 파일 이름 은 test 이 고 내용 은 1 부터 9 까지 모든 숫자 줄 입 니 다.
     
    ➜ grep -A2 7 test
    7
    8
    9

     
      -A2 7  7 을 찾 아서 7 뒤에 두 줄 을 출력 하 는 효과 가 있 습 니 다.
    같은 이치 로 -B2 7-C2 7 는 7 을 찾 은 다음 에 각각 7 앞의 두 줄 과 앞 뒤 두 줄 을 출력 한다.
     
    ➜ grep -B2 7 test
    5
    6
    7
    
    ➜ grep -C2 7 test
    5
    6
    7
    8
    9

    계속, 우리 가 test 라 는 파일 의 내용 이 다음 과 같다 고 가정 합 니 다.
    ➜ cat test
    aaaa
    bbbbbb
    AAAaaa
    BBBBASDABBDA
    grep -c 명령 의 역할 은 출력 이 일치 하 는 줄 수 입 니 다. 예 를 들 어 우 리 는 aaa 을 포함 하 는 몇 줄 을 찾 고 싶 습 니 다. 한눈 에 두 줄 이 있 는 것 을 알 수 있 습 니 다. 첫 번 째 줄 과 세 번 째 줄 은 모두 포함 되 어 있 습 니 다.
    ➜ grep -c aaa test
    2
    grep -e 명령 은 여러 개의 일치 하 는 관 계 를 실현 하 는 것 이다. 예 를 들 어 우 리 는 포함 aaaa 또는 bbbb 을 찾 으 려 면 첫 번 째 줄 과 두 번 째 줄 로 돌아 가 야 한다.
    ➜ grep -e aaaa -e bbbb test
    aaaa
    bbbbbb
    grep -F 명령 에 해당 하 는 것 은 fgrep 을 고정 문자열 로 보 는 것 이다.예 를 들 어 검색 pattern 을 가지 고 있 지 않 은 'aa*' 과 가지 고 있 지 않 은 것 은 다음 과 같다.
    ➜ grep 'aa*' test
    aaaa
    AAAaaa
    
    ➜ grep -F 'aa*' test

    두 번 째 는 볼 수 있 지만 찾 을 수 없습니다. 검색 한 것 은...  -F 이 문자열 은 정규 표현 식 이 아 닙 니 다.aa* 의 사용 방법 은 뒤에 있 는 이 파일 의 내용 을 grep -f 로 생각 하 는 것 이다.예 를 들 어 우리 에 게 파일 이 있 는데 이름 은 grep. txt 이 고 그 다음 내용 은 pattern 입 니 다. 사용 방법 은 다음 과 같 습 니 다.
    ➜ grep -f grep.txt test
    aaaa
    AAAaaa

    실제 와 같다 aa*grep 'aa*' test 대소 문 자 를 무시 하 는 역할 을 한다.grep -i --ignore-case 일치 하 는 줄 번 호 를 표시 하 는 것 은 줄 번 호 를 더 표시 하 는 것 입 니 다. 자세히 말 할 필요 가 없습니다.grep -n 일치 하 는 문자열 만 표시 합 니까? 아니면 아까 grep -o 거 리 를 사용 합 니까? 이전에 표 시 된 것 은 모두 일치 하 는 문자 가 있 는 줄 입 니 다. 이 명령 은 일치 하 는 문자 만 표시 합 니 다.
    ➜ grep -o 'aa*' test
    aaaa
    aaa
    aa* 일치 하 는 결 과 를 인쇄 하지 않 습 니 다.방금 이것 을 보고 나 는 한참 동안 의 심 스 러 웠 는데, 너 에 게 문자열 을 검색 하 라 고 했 는데, 네가 나 에 게 결 과 를 주지 않 으 면 무슨 소 용이 있 니?그리고 일치 하 는 내용 이 있 으 면 즉시 상태 값 0 으로 돌아 가 는 튜 토리 얼 도 많다.그래서 보통 grep -q 스 크 립 트 에 쓰 인 다.  shell  판단 안.if 일치 하지 않 는 줄 을 표시 합 니 다. grep -v 역방향 일치 에 해당 합 니 다. 가장 흔히 볼 수 있 는 것 은 스 레 드 를 찾 는 명령 에 사 용 됩 니 다. 가끔 인쇄 [^] 스 레 드 를 사용 합 니 다. 여기에 자신 을 제거 할 수 있 습 니 다.
    ➜ ps -ef|grep Typora
      501 91616     1   0  11   ??        13:39.32 /Applications/Typora.app/Contents/MacOS/Typora
      501 14814 93748   0  5:33   ttys002    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn Typora
    
    ➜ ps -ef|grep Typora|grep -v grep
      501 91616     1   0  11   ??        13:39.32 /Applications/Typora.app/Contents/MacOS/Typora

     
    두 번 째 로 인쇄 되 지 않 은 것 을 볼 수 있 습 니 다 grep 스 레 드 자체grep 전체 단어 와 일치 합 니 다. grep -w 에 완전히 부합 되 는 한 번 만 일치 합 니 다.
    ➜ grep aaa test
    aaaa
    AAAaaa
    
    ➜ grep -w aaa test

    두 번 째 결 과 는 비어 있 는 것 을 볼 수 있다. 왜냐하면 pattern 라 는 단어 가 없 기 때문이다.
    정규 에 관 한 고급 용법 은 더 이상 깊이 연구 하지 않 고 다음 에 통일 적 으로 정리 할 것 이다.
    sed aaa  명령 의 역할 은 스 크 립 트 를 이용 하여 텍스트 파일 을 처리 하 는 것 이다.사용 방법:
    sed [-hnV][-e][-f<script  >][    ]</code></pre> 
      <p><strong>    </strong>:</p> 
      <ul> 
       <li><code>-e<script></code> <code>--expression=<script></code>         <code>script</code>           ,  <code>-e</code>    ,      。</li> 
       <li><code>-f<script  ></code> <code>--file=<script  ></code>        <code>script</code>             。</li> 
       <li><code>-h</code> <code>--help</code>    。</li> 
       <li><code>-n</code>   <code>--quiet</code>   <code>--silent</code>     <code>script</code>       。</li> 
       <li><code>-V</code>   <code>--version</code>       。</li> 
      </ul> 
      <p><strong>    </strong>:</p> 
      <ul> 
       <li>a:  , a         ,             (      )~</li> 
       <li>c:  , c         ,         n1,n2     !</li> 
       <li>d:  ,      ,   d           ;</li> 
       <li>i:  , i         ,             (      );</li> 
       <li>p:  ,            。   p      sed -n     ~</li> 
       <li>s:  ,     s             ,   1,20s/old/new/g 。</li> 
      </ul> 
      <p> </p> 
      <p>         ,  <code>test</code>   ,    :</p> 
      <pre><code>➜ cat test 
    HELLO LINUX!  
    Linux is a free unix-type opterating system.  
    This is a linux testfile!  
    Linux test</code></pre> 
      <h1>     </h1> 
      <p>    <code>sed -e 3a
    ewLine testfile</code> , <code>newLine</code> , 。 :</p> <pre><code>➜ sed -e 3a
    ewline test HELLO LINUX! Linux is a free unix-type opterating system. This is a linux testfile! newline Linux test</code></pre> <p> , , , 。</p> <p>  a , Linux , :<code>sed -e /Linux/a
    ewline test</code>  。 , 、 <code>Linux</code>, :</p> <pre><code>➜ sed -e /Linux/a
    ewline test HELLO LINUX! Linux is a free unix-type opterating system. newline This is a linux testfile! Linux test newline</code></pre> <p> , 。</p> <p><code>sed -e /Linux/a
    ewline test</code> <code>sed "/Linux/a newline" test</code></p> <h3> </h3> <p>  <code>a</code>  ,<code>sed 3i
    ewline test</code> <code>newline</code>:</p> <pre><code>➜ sed 3i
    ewline test HELLO LINUX! Linux is a free unix-type opterating system. newline This is a linux testfile! Linux test</code></pre> <p><code>sed /Linux/i
    ewline test</code> <code>Linux</code> :</p> <pre><code>➜ sed /Linux/i
    ewline test HELLO LINUX! newline Linux is a free unix-type opterating system. This is a linux testfile! newline Linux test</code></pre> <p> 。</p> <h3> </h3> <p> <code>d</code>, , , :</p> <pre><code>➜ sed '/Linux/d' test HELLO LINUX! This is a linux testfile!</code></pre> <p> 。</p> <h3> </h3> <p> , <code>c</code>。 :</p> <pre><code>➜ sed '/Linux/c\Windows' test HELLO LINUX! Windows This is a linux testfile! Windows</code></pre> <p> </p> <p>  <code>s</code>, , :<code>sed 's/old/new/g'</code> <code>old</code> ,<code>new</code> , :</p> <pre><code>➜ sed 's/Linux/Windows/g' test HELLO LINUX! Windows is a free unix-type opterating system. This is a linux testfile! Windows test</code></pre> <p>  <code>s</code>, , :<code>sed 's/old/new/g'</code> <code>old</code> ,<code>new</code> , :</p> <pre><code>➜ sed 's/Linux/Windows/g' test HELLO LINUX! Windows is a free unix-type opterating system. This is a linux testfile! Windows test</code></pre> <p> <code>/g</code> , 。 :</p> <p> </p> <pre><code>➜ cat test2 aaaaaaaaaaa bbbbbabbbbb cccccaacccc</code></pre> <p> <code>a</code> <code>A</code>, :</p> <pre><code> sed 's/a/A/3g' test2 aaAAAAAAAAA bbbbbabbbbb cccccaacccc</code></pre> <p> , <code>a</code> 。</p> <p> <code>s</code> , , <code>/^/</code> <code>/$/</code> :</p> <pre><code>➜ sed 's/^/###/g' test ###HELLO LINUX! ###Linux is a free unix-type opterating system. ###This is a linux testfile! ###Linux test ➜ sed 's/$/---/g' test HELLO LINUX! --- Linux is a free unix-type opterating system. --- This is a linux testfile! --- Linux test ---</code></pre> <p> , :</p> <ul> <li><code>^</code>  。 :<code>/^#/</code>  # 。</li> <li><code>$</code>  。 :<code>/}$/</code>  } 。</li> <li><code>\<</code>  。 :`\ abc 。</li> <li><code>\></code>  。 :<code>abc\></code>  abc 。</li> <li><code>.</code>  。</li> <li><code>*</code>  0 。</li> <li><code>[ ]</code>  。 :<code>[abc]</code>  a b c,  <code>[a-zA-Z]</code>  26 。 ^ ,  <code>[^a]</code>  a  </li> </ul> <p> , 。 ? <code>newline</code>, :</p> <pre><code>➜ sed '1,2a
    ewline' test HELLO LINUX! newline Linux is a free unix-type opterating system. newline This is a linux testfile! Linux test</code></pre> <p> 。 , , <code>//</code> :</p> <pre><code>➜ sed '/LINUX/,/linux/i\test' test test HELLO LINUX! test Linux is a free unix-type opterating system. test This is a linux testfile! Linux test</code></pre> <p> , <code>LINUX</code> , <code>linux</code> , 123 </p> <p>, 。</p> <h3> </h3> <p><code>-e</code> , <code>sed</code> :</p> <pre><code>➜ sed -e 's/Linux/Windows/g' -e 's/Windows/Mac OS/g' test HELLO LINUX! Mac OS is a free unix-type opterating system. This is a linux testfile! Mac OS test</code></pre> <p> <code>Linux</code> <code>Windows</code>, <code>Windows</code> <code>Mac OS</code>。</p> <h3> </h3> <p> , 。 <code>> file</code> <code>-i</code> </p> <h2>awk</h2> <p>awk , grep ,sed ,awk , 。 awk , , 。</p> <h3> </h3> <pre><code>awk [ ] 'script' var=value file(s) awk [ ] -f scriptfile var=value file(s)</code></pre> <p> :</p> <ul> <li>-F fs or --field-separator fs ,fs , -F:。</li> <li>-v var=value or --asign var=value 。</li> <li>-f scripfile or --file scriptfile awk 。</li> </ul> <h3> </h3> <p> <code>awk </code>。 <code>test</code>:</p> <pre><code>➜ cat test 2 this is a test 3 Are you like awk This's a test 10 There are orange,apple,mongo</code></pre> <p> <code>awk '{print $1,$4}' test</code> :</p> <pre><code>2 a 3 like This's 10 orange,apple,mongo</code></pre> <p> , 。 <code>$0</code> 。</p> <p><code>awk -F</code> , tab :</p> <pre><code>➜ awk -F, '{print $2}' test apple</code></pre> <p> , , <code>10 There are orange</code>、<code>apple</code> <code>mongo</code> , 。</p> <p> :</p> <pre><code>➜ awk -F '[ ,]' '{print $1,$2,$5}' test 2 this test 3 Are awk This's a 10 There apple</code></pre> <p> 。</p> <p> , :</p> <pre><code>➜ awk '/^This/' test This's a test</code></pre> <p> <code>This</code> 。</p> <pre><code>➜ awk '$0 !~ /is/' test 3 Are you like awk 10 There are orange,apple,mongo</code></pre> <p> <code>is</code> , 。</p> <p> :<code>awk -f {awk } { }</code>, , 。</p> <h3> </h3> <p><code>awk</code> , <code>$NF</code> , 。</p> <pre><code>➜ awk '{print $NF}' test test awk test orange,apple,mongo</code></pre> <p> 。</p> <p> :</p> <ul> <li><code>FILENAME</code>: </li> <li><code>FS</code>: , 。</li> <li><code>RS</code>: , , 。</li> <li><code>OFS</code>: , , 。</li> <li><code>ORS</code>: , , 。</li> <li><code>OFMT</code>: , <code>%.6g</code>。</li> </ul> <h3> </h3> <p><code>awk</code> , 。 :</p> <ul> <li><code>toupper()</code>: 。</li> <li><code>tolower()</code>: 。</li> <li><code>length()</code>: 。</li> <li><code>substr()</code>: 。</li> <li><code>sin()</code>: 。</li> <li><code>cos()</code>: 。</li> <li><code>sqrt()</code>: 。</li> <li><code>rand()</code>: 。</li> </ul> <h3> </h3> <p><code>awk</code> , 。 :</p> <pre><code>awk ' ' </code></pre> <p> , , , :</p> <pre><code>➜ awk -F, '$2!="" {print $2}' test apple</code></pre> <p> <code>apple</code> 。</p> <h3>if </h3> <p><code>awk</code> <code>if</code> , 。 :</p> <pre><code>➜ awk '{if ($2 > "t") print $1}' test 2</code></pre> <p> </p> <p> : , <code>t</code>, 。 unicode 。</p> <p> , , , , 。</p> <p>  :</p> <p>linux sed https://www.runoob.com/linux/linux-comm-sed.html</p> <p>awk :https://www.runoob.com/linux/linux-comm-awk.html</p> <p>awk :http://www.ruanyifeng.com/blog/2018/11/awk.html</p> <p> </p> <p> </p> </div> </div> </div> </div> </div> <!--PC WAP --> <div id="SOHUCS" sid="1288483542698893312"></div> <script type="text/javascript" src="/views/front/js/chanyan.js">
    이 가능 하 다, ~ 할 수 있다,...
  • 항목 의 매 거 와 주해 의 결합 사용
    비상 조끼
    java enum annotation
  • [스칼라 17] 스칼라 핵심 11: 밑줄의 용법
    bit1129
    scala
  • 웹 캐 시 기본: 용어, http 헤더, 캐 시 정책
    dalan_123
    Web
  • 질문
    주 범 양
    linux crontab unix
  • tomcat 에 2 급 도 메 인 이름 공유 session 지원
    g21121
    session
  • 웹 보고서 도구 FineReport 상용 함수 의 용법 총화 (수학 과 삼각함수)
    A 씨 는 괴 롭 히 지 않 는 다
    Web finereport 총결산
  • linux 자바 프로 세 스 sh 파일 시작
    담 위의 풀 한 포기.
    linux shell jar
  • 나의 spring 학습 노트 5 - applicationContext 를 어떻게 사용 하여 BeanFactory 를 교체 합 니까?
    aijuans
    봄 3 시리즈
  • 알파벳 별 분류:
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 기타
    첫 페이지 -
    우리 -
    역 내 검색 -
    Sitemap -
    권리 침해 신고
    모든 IT 지식 창고 저작권© 2000 - 2050 IT 지식 창고 IT610. com, 판권 소유.
    경 ICP 비 09083238 호









    좋은 웹페이지 즐겨찾기