다음 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//'