여러 줄의 일부 데이터를 정규식으로 한 줄로 바꾸고 싶습니다.정규식으로 만 Perl에서 데이터를 피벗하는 방법은 무엇입니까?
데이터는 HTTP 교환의 시작 및 끝 통지와 하나 이상의 행에 기록 된 세부 사항으로 구성됩니다. 그것은 (거의) 작동
(\d+-\d+-\d+) (\d+:\d+:\d+,\d+) INFO (\[com\.LoggingFilter\]) \(([^)]+)\) (\d+) \* Server in-bound request
(?=\5 > (.+)
[\s\S]*
\5 > user-agent:\s*(.+)
[\s\S]*
(\d+-\d+-\d+) (\d+:\d+:\d+,\d+) INFO \3 \(\4\) \5 \* Server out-bound response
\5 < (\d+)
[\s\S]*)
: 다음 작업을 수행하는 정규식입니다 VIEW regex in action. 긍정적 인 모습으로 보존 된 일부 세부 정보는 정규 표현식 교체 후에도 유지됩니다.
"88598";"2016-07-29";"00:00:08,262";"2016-07-29";"00:00:08,262";"http-10.2.3.4-8080-14";"Java/1.7.0_79";"303";"GET http://1.2.3.4:8080/service/api/
"88599";"2016-07-29";"00:00:08,382";"2016-07-29";"00:00:08,382";"http-10.2.3.4-8080-8";"Java/1.7.0_79";"303";"GET http://1.2.3.4:8080/service/api/"
(...)
대신이 작동하는 것 같다
"88598";"2016-07-29";"00:00:08,262";"2016-07-29";"00:00:08,262";"http-10.2.3.4-8080-14";"Java/1.7.0_79";"303";"GET http://1.2.3.4:8080/service/api/"88598 > GET http://1.2.3.4:8080/service/api/
<garbage data here>
"88599";"2016-07-29";"00:00:08,382";"2016-07-29";"00:00:08,382";"http-10.2.3.4-8080-8";"Java/1.7.0_79";"303";"GET http://1.2.3.4:8080/service/api/"88599 > GET http://1.2.3.4:8080/service/api/
(...)
정규 표현식, 출력 및 얻고 자하는 출력을 제공했습니다. 그게 다 훌륭해. 우리가 누락 된 부분은 입력 데이터의 예입니다. –
@DaveCross 정규 표현식 데모에 있습니다. – horcrux
"정규식만으로"하는 것은 좋지 않은 방법입니다 (비효율적입니다). 라인 단위 또는 블록 방식을 고려해야합니다. –