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/: sed의 s명령에는 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.