grep이 존재하는 세계에서 `sed -n "/regexp/p"`에 대한 사용 사례가 있습니까?

grep이 존재하는 세계에서 `sed -n "/regexp/p"`에 대한 사용 사례가 있습니까?

sed -n "/regexp/p"일치하는 줄만 인쇄 regexp되고 다른 줄은 인쇄되지 않습니다. 이것은 수행된 작업과 정확히 일치하는 것 같습니다 grep. 이 구성을 사용하여 내가 본 유일한 사용 사례는 grep이미 sed 내부에서 뭔가를 하고 있고 다른 프로그램으로 파이프하는 것이 어색할 경우입니다.

누구든지 이 구조를 사용하는 다른 이유를 생각할 수 있습니까 grep?

답변1

명령 sed -n '/re/p'(또는 각 루프의 끝에서 기본 출력을 억제 sed '/re/!d'하지 않는 )은 와 동일하며 둘 다 이와 같은 기본 방식으로 편집기의 명령("전역 일치 및 인쇄") 으로 추적될 수 있습니다 . 존재하는 것처럼.-ngrep -e 're'edg/re/presedgrepged

특정 정규 표현식과 일치하는 행만 인쇄하려면 grep를 사용하세요 grep. 이것이 가장 기본적인 작업입니다. 이 작업에 grep대신 사용하면 sed쉘 코드가 더 깔끔하고 이해 및 유지 관리가 더 쉬워집니다.

더 긴 편집 스크립트의 일부인 경우 /re/pin을 사용하세요. 매우 특별하고 기발한 요구 사항이 없는 한 입력을 파이프로 연결하거나 그 반대로 파이프하지 마십시오.sedsedgrepsed

명령 /re/은 다음과 같습니다.sed주소. 특정 정규식과 일치하는 모든 줄을 처리합니다. 를 사용하면 /re/p다음 줄이 인쇄됩니다. 즉, /re/명령의 주소입니다 p.

주소는 줄 번호일 수도 있고, 두 줄 번호, 두 정규식 또는 이들의 조합으로 설명되는 범위일 수도 있습니다. 예를 들어 를 사용하여 sed -n '5,/re/p'5번째 줄부터 일치하는 줄까지 모든 줄을 인쇄 할 수 있습니다 re. 유틸리티 grep에는 이 기능이 없으며 편집기 sed에서 ed상속 됩니다.

간단히 말해서, grep특정 정규식과 일치하는 줄을 추출하는 데 더 적합한 도구입니다. 더 복잡한 기준(예: 범위 내에 있음)과 일치하는 행을 추출하려면 sed또는 를 사용합니다 awk.

답변2

크기에 주의하세요:

$ ls -lh /bin/grep /bin/sed
-rwxr-xr-x 1 root root 207K Apr 29  2016 /bin/grep
-rwxr-xr-x 1 root root  72K Feb 11  2016 /bin/sed
$

grep다음보다 더 많은 메모리를 사용했습니다.sed

실행 시간(실제):

$ time date | grep Apr
Fri Apr 17 13:31:11 PDT 2020

real    0m0.035s
user    0m0.000s
sys     0m0.016s
$ time date | sed -n '/Apr/p'
Fri Apr 17 13:31:29 PDT 2020

real    0m0.028s
user    0m0.000s
sys     0m0.016s
$

sed조금 더 빨라졌는지 볼까요 ?

이는 리소스가 제한된 임베디드 환경에서 중요할 수 있습니다.

관련 정보