sed 패턴 일치를 수행하고 마지막 일치 후 중지하는 방법

sed 패턴 일치를 수행하고 마지막 일치 후 중지하는 방법

값을 계속해서 반복하는 거대한 로그 파일이 있습니다. A부터 D까지의 단어 세트를 찾고 싶지만 일치 후에 중지합니다. 아래에서 다시 시작하세요.

sed -n -e '/Word A/,/Word D/ p'

첫 번째 "Word D"를 찾은 후 멈추게 하는 방법

Word A
Word B
Word C
Word D
Word E
Word F
Word D
Word G

sed -n -e '/Word A/,/Word D/ p'의 예상 결과

Word A
Word B
Word C
Word D

실제 결과:

Word A
Word B
Word C
Word D
Word E -> should not exist
Word F -> should not exist
Word D -> should not exist
Word G -> should not exist

답변1

GNU 4.2.2를 사용하여 sed복사 할 수 없습니다.

home:~/scratch/
$ sed -ne '/Word A/,/Word D/p' input
Word A
Word B
Word C
Word D
home:~/scratch/
$ cat input
Word A
Word B
Word C
Word D
Word E
Word F
Word D
Word G

답변2

sedOpenBSD 또는 GNU를 사용하여 이 문제를 재현 할 수 없습니다 sed.

데이터가

단어 A
단어 B
워드 C
단어 D
단어 E
단어 F
단어 A
단어 D
단어 G

(추가 Word A줄에 주목하세요)

$ sed -n -e '/Word A/,/Word D/p' data.in
Word A
Word B
Word C
Word D
Word A
Word D

이 출력의 첫 번째 비트만 원하는 경우:

$ sed -n -e '/Word A/,/Word D/p' -e '/Word D/q' data.in
Word A
Word B
Word C
Word D

답변3

내 문제는 이스케이프 문자가 올바르지 않다는 것입니다. 팁을 주신 모든 분들께 감사드립니다.

for /f "tokens=* " %%e in ('sed -n "/\/ios\/mdm2\/%Perimeter%.*DEBUG MDM payload/,/<\/plist>/p" %log%') do ( echo %%e > file.txt)

관련 정보