2015-01-23 1 views
1

간 파일로 출력 : 나는 <MessageForTransform> 태그를 포함하는 사이에 모든 정보를 끌어 정규식을 알아 내려고 노력하고 있어요그렙 및 알려진 두 노드 나는 다음과 같은 정보가 기록되고있다

<MessageForTransform> 
    <node> 
     <taster></taster> 
    </node> 
</MessageForTransform> 

.

$ tail -f logFileToRead.txt >>logFileToWrite.txt | grep "regex"

을 나는 다음과 같은 정규식

\<MessageForTransform\>[^]\<\/MessageForTransform\>

I을 사용했다 :보고 파일로 출력 할 tail -f를 사용

보너스 포인트, 나는 다음과 같은 형식이 생각 더 많은 정보를 제공하고 싶습니다. 그러나 이것에 관해서는 제가 둘러 본 정규 표현식을 모른 채 얻을 수 있습니다. 위의 정규식 검사기에서 원시 XML을 페이지에 있지만 터미널에 게시 할 작동합니다.

미리 감사드립니다.

답변

2

일반적으로 ... 우리는 XML 파일을 구문 분석하기 위해 정규 표현식을 사용하지 않습니다!

awk -v delimitertag="MessageForTransform" ' 
    BEGIN    { weprint=0 ; sd="<"delimitertag">"; ed="</"delimitertag">"} 
    ($0 ~ sd)  { weprint=1;} 
    (weprint == 1) { print $0 ;} 
    ($0 ~ ed)  { weprint=0;} 
    ' your_file_here #... or nothing if you want to parse stdin 

I :

그러나 당신은 당신의 XML 파일이 분리 된 선이 시작하고 기록 할 것을 끝으로, 포맷되는 표준 방법을 사용하는, 그럼 당신이 awk가 있었다 확신하는 경우 (당신이이 방법보다 더 좋은 방법을 얻을 것이라고 확신합니다.)

시작/끝 줄도 인쇄하지 않도록 수정하는 것이 쉽습니다.

그리고

는 예를 들어, 유연성 약간의 추가 : sd="<"delimitertag"[^>]*>";을 경우 해당 태그 내가 그것을 확인거야 이것에 대한 optionnaly 일부 additionnal 값이 포함 된

+0

안녕하세요, 감사를 할 수 있습니다. 기본적으로 XML을 사용하여 엄청난 양의 정크가있는 거대한 파일 안에있는 XML 데이터를 가져옵니다. – Aleski

+0

어, 이걸 bash 스크립트에서 던집니다. 뭐라 구요? 나는 엄청나게 터미널 물건에 새로운 ... – Aleski

+0

당신은 터미널 프롬프트 (직접 복사/붙여 넣기)에서 이것을 실행할 수 있습니다. 파일에 저장되어있는 경우 파일을 가져 오는 방법은 여러 가지가 있지만 파일을 가져 오거나 awk를 직접 실행하는 방법이 있지만 옵션을 변경하고 조금 다르게 정렬해야합니다. 'your_file_here'을 원본 파일의 이름으로 바꾸고, 그 직후에 새 파일 ("#"앞에)으로 리디렉션을 추가하십시오. 따라서 내 대답,'your_file_here'을'logFileToRead> logFileToWrite'로 대체하십시오. –