sed -n "/regexp/p"
일치하는 줄만 인쇄 regexp
되고 다른 줄은 인쇄되지 않습니다. 이것은 수행된 작업과 정확히 일치하는 것 같습니다 grep
. 이 구성을 사용하여 내가 본 유일한 사용 사례는 grep
이미 sed 내부에서 뭔가를 하고 있고 다른 프로그램으로 파이프하는 것이 어색할 경우입니다.
누구든지 이 구조를 사용하는 다른 이유를 생각할 수 있습니까 grep
?
답변1
명령 sed -n '/re/p'
(또는 각 루프의 끝에서 기본 출력을 억제 sed '/re/!d'
하지 않는 )은 와 동일하며 둘 다 이와 같은 기본 방식으로 편집기의 명령("전역 일치 및 인쇄") 으로 추적될 수 있습니다 . 존재하는 것처럼.-n
grep -e 're'
ed
g/re/p
re
sed
grep
g
ed
특정 정규 표현식과 일치하는 행만 인쇄하려면 grep
를 사용하세요 grep
. 이것이 가장 기본적인 작업입니다. 이 작업에 grep
대신 사용하면 sed
쉘 코드가 더 깔끔하고 이해 및 유지 관리가 더 쉬워집니다.
더 긴 편집 스크립트의 일부인 경우 /re/p
in을 사용하세요. 매우 특별하고 기발한 요구 사항이 없는 한 입력을 파이프로 연결하거나 그 반대로 파이프하지 마십시오.sed
sed
grep
sed
명령 /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
조금 더 빨라졌는지 볼까요 ?
이는 리소스가 제한된 임베디드 환경에서 중요할 수 있습니다.