grep, less, awk, sed 사용시기 [닫힘]


17

나는 리눅스의 세계에 들어가고 있으며 grep점점 더 많은 것을 사용 하고 있습니다. 그렇게하면 때로는 내가 원하는 것에 부적합하다는 것을 알았습니다.

나는 grep며칠 전에 어려움을 겪고 있었고 수석 리눅스 관리자 인 동료가 사용하도록 말했다 awk. 결과가 얼마나 빨리 나는 놀랐습니다.

내 질문은 언제 다른 것을 사용하도록 선택합니까? 함께 일하고 grep시간을 절약 할 수 있었을 때 많은 시간을 보내면서 일하기 전에 어떤 질문을 할 수 awk있습니까?


이것은 좋은 질문이지만 실제로는 매우 광범위하며 주로 의견을 기반으로합니다. 귀하의 질문에 대답하기 위해, awk와 반대로 grep을 사용하는 것은 awk / sed를 얼마나 편안하게 사용하는지에 달려 있습니다. grep이 제공하는 것보다 더 구체적인 것을 찾거나 sed를 사용하여 특정 문자열로 파일을 바꾸거나 편집하려는 경우와 같이 후자를 통해 이것을 사용하는 몇 가지 이유가 있습니다. 그러나 다시 한번 말하지만, 여러분의 편안함 수준과 awk / sed 사용 경험에 달려 있습니다.
ryekayo

7
파일 less보는 데 사용 합니다. 사용 grep하는 검색 파일을 통해. 파일 sed편집 하는 데 사용 합니다. 사용 awk을 통해 grep그리고 sed당신이 처리 할 파일이 어떤 종류의가있을 때 구조 (예 : 열 등을). 사용 sed을 통해 awk당신이 주로 (텍스트의 삭제 또는 추가 라인 등) 라인을 처리 할 때. 나는 누군가가 내 것보다 더 완전한 20 페이지 답변을 쓸 것이라고 확신합니다.
Satō Katsura

안녕 사토, 그것은 길이에 관한 것이 아니라 말하는 것입니다. 그리고 당신은 몇 줄이 매우 유익합니다. 감사합니다.
frankguthrie

답변:


25

sed그리고 awk의 상위 집합입니다 grep. 서로 더 쉽게 할 수있는 일이 있습니다.

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

grep -i foosed '/[fF][oO][oO]/!d'GNU와 같은 비표준 확장을 고려하지 않는 한 있어야합니다 sed '/foo/I!d'. 또는와 awk: awk 'tolower($0) ~ /foo/'나 다시 GNU 확장을 사용 : awk -v IGNORECASE=1 /foo/.

다른 도구가 좋고 다른 도구와 번거로운 것들 :

grep

grep간단한 도구이지만 awk또는 sed다음 과 같이 재현하기 어려운 매우 특수한 작동 모드가 있습니다 .

  • grep -i 대소 문자를 구분하지 않는 일치 (위 참조)
  • grep -Fe "$string"고정 문자열 검색의 경우 ( export string; awk 'index($0, ENVIRON["string"])'awk직접 일치하지 않음 sed)
  • grep -r재귀 검색을위한 (비표준)
  • (비표준) grep -P/ pcregrepperl-like regexps (일부 sed구현은 가장 중요한 것은 아니지만 perl-like regexp 지원을 가짐)
  • (비표준) grep -o일치하는 부분을 반환합니다 (여러 줄 awk또는 sed동일)
  • (비 표준) grep -A/B/C(와 유사한 방식으로 할 다시 고통스러운 경기 주위에 복귀 컨텍스트 sed또는 awk)

sed

  • s/foo/bar/: seds명령에는 awk다음과 같이 구현하기 어려운 기능이 있습니다 .
  • s/foo\(.*\)bar/\1/g: 캡처 (GNU awk에 gensub()확장명이 있지만)
  • s/foo/bar/3: 각 줄에서 3 번째 발생을 교체
  • (비표준) : 내부 파일 편집 (GNU에서도 지원되지만 awk).

어 wk

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

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

perl실질적인 추출 및보고 도구로서 모든 것이 최고입니다. 그것이 처음에 디자인 된 것입니다 (모든 것을 sed/ awk쓸모없는 도구로 만들기 위해 ).

perl텍스트 처리를 마스터 하면 심각한 이점이 있습니다. sed예를 들어 덜 일반적인 명령을보기 전에도 시간을 투자하는 것이 좋습니다 .

공연

경험상 도구가 더 전문화 될수록 가장 효율적입니다. 그러나 이는 구현, 작업 및 기타 몇 가지 다른 요소와 성능에 따라 크게 달라질 수 있습니다.

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


훌륭한 답변! 도구의 효율성에 대해 알고 있습니까? OP의 진술에 대해 혼란 스럽 awk습니다 grep.
pfnuesel

@pfnuesel, 구현 및 사용 패턴에 따라 다릅니다. 예를 들어, mawk매우 효율적인 것으로 알려져 있지만 (다른 도구보다 효율적인 이유의 일부인 멀티 바이트 문자는 지원하지 않습니다)
Stéphane Chazelas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.