grep, less, awk, sed를 사용하는 경우

grep, less, awk, sed를 사용하는 경우

나는 Linux의 세계에 빠져들고 있으며 직장에서 Linux를 점점 더 많이 사용하고 있습니다 grep. 이렇게 함으로써 때로는 그것이 내 요구 사항에 충분하지 않다는 것을 알게 되었습니다.

grep며칠 전에 어려움을 겪고 있었는데 선임 Linux 관리자 중 한 명이 나에게 awk.

그래서 내 질문은 언제 다른 것보다 하나를 사용하도록 선택합니까? 일을 시작 grep하고 내가 할 수 있었고 시간을 절약할 수 있었던 많은 시간을 보내기 전에 나 자신에게 어떤 질문을 던질 수 있을까요 awk?

답변1

sedawk상위 집합이므로 grep어떤 작업은 둘 중 하나를 사용하는 것이 더 쉽습니다.

grep foosed '/foo/!d'이는 또는 으로 작성할 수 있지만 awk /foo/다음을 고려하십시오.

grep -i foosed '/[fF][oO][oO]/!d'GNU 와 같은 것을 고려하고 싶지 않다면 : sed '/foo/I!d'을 사용 하거나 다시 GNU 확장자: 를 사용하십시오 .awkawk 'tolower($0) ~ /foo/'awk -v IGNORECASE=1 /foo/

다양한 도구가 잘하는 것과 다른 도구가 어려움을 겪는 것:

grep

grep간단한 도구이지만 사용 awk하거나 재현하기 어려운 매우 특수한 작동 모드를 가지고 있습니다 sed.

  • grep -i대소문자를 구분하지 않는 일치(위 참조)
  • grep -Fe "$string"고정 문자열 검색에 사용됩니다( export string; awk 'index($0, ENVIRON["string"])'AND awk, AND 와 직접적으로 동등한 것은 없습니다 sed).
  • (비표준) grep -r재귀 검색용
  • (비표준) grep -P/ pcregrepPerl과 유사한 정규 표현식의 경우(일부 sed구현에서는 Perl과 유사한 정규 표현식을 지원하지만 기본적으로는 지원하지 않음)
  • (비표준) grep -o일치하는 부분을 반환합니다(몇 줄 awk또는 sed동일한 작업 수행).
  • (비표준) 일치의 컨텍스트를 반환합니다. (역시 사용하기 어렵 grep -A/B/C거나 유사한 방식 입니다 )sedawk

sed

  • s/foo/bar/: sed님의 명령에는 다음과 같이 s구현하기 어려운 기능이 있습니다 .awk
  • s/foo\(.*\)bar/\1/g:capture (GNU awk에는 확장 기능이 있지만 gensub())
  • s/foo/bar/3:각 줄의 세 번째 항목을 바꿉니다.
  • (비표준): 내부 파일 편집(GNU는 awk이제 이를 지원하지만).

awk세 가지 중에서 가장 기능이 풍부한 것입니다.

  • 숫자 처리에 적합
  • 열 형식의 입력을 처리하는 데 적합합니다.
  • 연관 배열은 다양한 소스에서 데이터를 추출하고 결합하는 데 적합합니다.

진주

perl실용적인 추출 및 보고 도구로서 이러한 모든 도구 중 최고의 기능을 갖추고 있습니다. 이것이 원래 의도된 것입니다( sed이 모든 것을 쓸모없게 만드는 도구가 됨 awk).

텍스트 처리를 마스터하면 perl큰 이점이 있습니다. 덜 일반적인 명령을 살펴보기 전에라도 시간을 들여서 살펴보는 것이 좋습니다 sed.

성능

경험상 도구가 더 전문화될수록 작업을 더 효율적으로 완료할 수 있습니다. 그러나 이는 구현, 작업 및 기타 몇 가지 요소에 따라 크게 달라지며 성능 상충점이 있을 수 있습니다.

grep예를 들어, 매우 빠른 일부 구현이 있지만 sed멀티바이트 문자를 지원하지 않으므로 멀티바이트 로케일의 미국 영어 텍스트에서만 제대로 작동합니다. 또는 작은 고정 길이 버퍼에서 작동하므로 임의의 입력에서는 작동하지 않기 때문에 빠릅니다.

관련 정보