안녕하세요, 로그 파일에 다음 항목이 있습니다. 위 줄에 거부 됨이 표시되면 이름 필드에 이름 목록을 생성해야합니다. 그래서 다음과 같은 것을 얻어야합니다.
샐리
매트
린다
이것으로 저를 도울 수 있습니까? 나중에 다른 로그에 사용할 수 있도록 명령을 설명해 주시면 감사하겠습니다.
<!-- user 1 -- >
<ABC 12345 "123" text="*Denied: ths is aa test status="0" >
<key flags="tdst" name="sally" />
<userbody>
</Status>
<!-- user 2 -- >
<ABD 12345 "123" text="*Denied: ths is aa test status="0" >
<key flags="tdst" name="Matt" />
<userbody>
</Status>
<!-- user 3 -- >
<ABD 12345 "123" text="*Denied: ths is aa test status="0" >
<key flags="tdst" name="Linda" />
<userbody>
</Status>
문안 인사
이 GNU sed는 작동 할 수 있습니다.
sed -n -r '/Denied:/{N; s/^.*name="([^"]*)".*$/\1/; p}' file
n은
여기에서 그룹화하는 데 사용되는 확장 정규식을 사용하여 인쇄 줄을 건너 뜁니다. 문자를 이스케이프하지 않기 위해 () 문자
N은 다음 줄을 읽고 패턴 공간에 추가합니다.
s / input / output /은 대체
^가 줄의 시작이므로 ^입니다. * name = "은 [^"] 첫 번째 다음 따옴표까지 모든 것을 찾습니다.
$는 줄의 끝입니다.
[^ "]는"(부정 설정)이 아닌 모든 문자입니다.
\ 1은 일치하는 그룹 만 사용합니다. 즉 ([^ "] *)
p는 인쇄 줄입니다 (이전 조건 거부가 처리 된 두 줄에 가득 차있는 경우)
산출
sally
Matt
Linda
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다