"Unix" 또는 "unix"라는 단어가 포함된 aa.txt 파일의 행을 인쇄하는 명령을 실행하십시오. grep, awk 및 sed 명령(3가지 다른 명령)을 사용해 보았습니다.

"Unix" 또는 "unix"라는 단어가 포함된 aa.txt 파일의 행을 인쇄하는 명령을 실행하십시오. grep, awk 및 sed 명령(3가지 다른 명령)을 사용해 보았습니다.

어떻게 선택하나요? "유닉스"와 "유닉스"

내 생각에는

  1. awk를 사용하세요

    $ awk ~"Unix|unix" {print $0}.aa.txt
    
  2. grep을 사용하는 단서 없음

  3. sed 사용

    $ sed "/Unix/p" aa.txt | "/unix/p" aa.txt
    

내 생각엔 이것들이 모두 잘못된 것 같아

그러니 대답해주세요..모르겠습니다..

답변1

문자열 과 일치 Unix하고 또는 중 하나가 되는 unix정규식 입니다 .[Uu]nix[Uu]Uu

다음 세 가지 도구를 사용하여 이 표현식과 일치하는 모든 행을 추출할 수 있습니다.

  • awk '/[Uu]nix/' file

    이것은 주어진 조건이 일치하면 현재 레코드(행)를 인쇄한다는 awk사실을 이용하는 "짧은 형식" 프로그램 입니다. awk불필요한 코드를 모두 포함하는 "긴 손" 변형은 다음과 같습니다 awk '$0 ~ /[Uu]nix/ { print $0 }' file.

  • grep '[Uu]nix' file

    grep유틸리티는 단순히 주어진 표현식과 일치하는 행을 추출합니다.

  • sed -n '/[Uu]nix/p' file

    이 명령은 각 줄의 기본 인쇄를 sed해제(사용 )합니다. -n그런 다음 주어진 표현식과 일치하는 행만 명시적으로 인쇄합니다.

    를 사용하여 sed다음을 선택할 수도 있습니다.삭제보고 싶지 않은 줄은 각 줄의 기본 인쇄를 사용하여 나머지 줄을 인쇄합니다. sed '/[Uu]nix/!d' file

awk, grep및 에서 sedgrep유틸리티는 특정 표현식과 일치하는 행을 추출하는 작업에 가장 적합합니다. awk더 많은 처리 또는 집계가 필요한 작업과 sed상태 보존이 거의 또는 전혀 필요하지 않은 한 줄 수정 에 가장 자주 사용됩니다 (그러나 세 도구 모두 해당 응용 프로그램에서 중복됩니다).

답변2

이 문제의 더 까다로운 부분은 "일치"입니다.단어유닉스냐 유닉스냐”

입력 파일 사용

$ cat -n file
     1  how do I pick them? both "Unix" and 'unix'
     2  Could be just Unix
     3  or just
     4  unix at the start of line
     5  do not match unixy or munix

1, 2, 4행은 일치해야 하지만 5행은 일치하지 않습니다. "unix"는 "단어"로 표시되지 않기 때문입니다.

또한 이러한 도구가 내장된 기능을 통해 대소문자를 구분하지 않는 일치를 수행하는 방법도 보여줍니다.

  1. grep

    $ grep -i unix file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    

    이제 -w("전체 단어") 옵션을 추가합니다.

    $ grep -i -w unix file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    
  2. GNU sed

    $ gsed -n '/unix/I p' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    

    이제 GNU 정규 표현식 단어 경계 표시를 추가하세요.

    $ gsed -n '/\<unix\>/I p' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    

    ( Mac에서 Homebrew를 통해 gsedGNU sed를 설치했습니다 )

  3. GNU awk

    $ gawk -v IGNORECASE=1 '/unix/' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    do not match unixy or munix
    
    $ gawk -v IGNORECASE=1 '/\<unix\>/' file
    how do I pick them? both "Unix" and 'unix'
    Could be just Unix
    unix at the start of line
    
  4. GNU가 아닌 도구: Mac의 기본 awk 및 sed와 같은

    \< \>이러한 도구는 GNU 정규식을 사용하지 않으며 편리한 단어 경계 도 없습니다 . 대소문자를 구분하지 않는 일치도 사용할 수 없습니다. 결과는 그다지 예쁘지 않습니다.

    /usr/bin/sed -En '/(^|[^_[:alnum:]])[Uu]nix($|[^_[:alnum:]])/ p' file
    /usr/bin/awk 'tolower($0) ~ /(^|[^_[:alnum:]])unix($|[^_[:alnum:]])/' file
    /usr/bin/awk -F'[^[:alpha:]]+' '{for (i=1; i<=NF; i++) if (tolower($i) == "unix") {print; next}}' file
    

관련 정보