![sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' 단락을 인쇄하는 방법 [중복]](https://linux55.com/image/133125/sed%20-e%20'%2F.%2F%7BH%3B%24!d%3B%7D'%20-e%20'x%3B%2FAAA%2F!d%3B'%20%EB%8B%A8%EB%9D%BD%EC%9D%84%20%EC%9D%B8%EC%87%84%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%20%5B%EC%A4%91%EB%B3%B5%5D.png)
다음 sed 명령이 단락을 인쇄하는 방법을 설명할 수 있는 사람이 있습니까?
주문하다:
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' file
가능하다면 누구나 이 명령을 여러 부분으로 나누어 설명하여 다양한 조건에 따라 명령을 수정하는 방법을 완전히 이해할 수 있습니다.
답변1
주문하다
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;' file
문자열이 포함된 단락을 인쇄합니다 AAA
.
sed
이는 다음 스크립트를 사용하여 호출됩니다 sed
.
/./{
H
$!d
}
x
/AAA/!d
주석이 달린 버전:
/./{ # When hitting a line that contains at least one character...
H; # Append the line to the "hold space".
$!d; # If it's not the last line, delete it.
}
x; # Swap the hold space and the pattern space.
/AAA/!d; # Delete the pattern space if it does not contain the string "AAA"
# (implicit print)
즉, "예약된 공간"(일반 버퍼 입력)에서 한 줄씩 수집하고 sed
빈 줄(패턴 불일치)을 찾으면 /./
저장된 줄 집합에 해당 문자열이 포함되어 있는지 확인 AAA
하고 인쇄합니다(있는 경우). 하나).
이는 여기 답변에도 설명되어 있습니다.GREP/SED 또는 AWK: 패턴 일치를 기반으로 파일의 전체 단락을 인쇄합니다.
주어진 파일
this is
a paragraph
this is
another one
this paragraph
contains the string
AAA
마지막 단락(앞에 빈 줄 포함)이 출력됩니다.
각 출력 단락 앞의 빈 줄을 제거하려면(원하는 경우) 다음을 사용하십시오.
/./{
H
$!d
}
x
/AAA/!d
s/\n//
또는 명령줄에서
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;s/\n//'