2012-07-02 3 views
1

프로덕션 레일스 로그 파일을보고 모든 POST 요청에서 전송 된 매개 변수를 찾으려고합니다. 지금은 다음을 사용하고 있습니다.한 줄로 구분 된 두 줄을 한 줄로 변환하십시오.

grep 'Started POST.*\/[fr]' log/production.log 

이것은 POST가 발생했지만 매개 변수는 표시되지 않습니다. 내가 원하는 것은의 라인을 따라 뭔가하는 것입니다 : 그것은

  • 인쇄 위의 정규식가 발생했을 때의 나오지 홀드 버퍼

    1. 스토어 라인을 홀드 버퍼의 내용과 현재 행이 발생 "매개 변수 :"
  • 답변

    2

    저는 정규식과 다음 줄을 표시해야한다는 것을 이해했습니다. 이 모양을 sed

    grep -A1 'Started POST.*\/[fr]' log/production.log 
    

    을 : grep는 자체를 할 수

    sed -n '/Started POST.*\/[fr]/{N;p}' log/production.log 
    

    또는하지 않을 경우 다음의 모든 라인 "매개 변수"컨텐츠 않을 수 있으며 만 그들을 필요 :

    sed -n '/Started POST.*\/[fr]/{N;/Parameters/p}' log/production.log 
    
    +0

    이것은 정확히 내가 필요한 것입니다! 감사! 나는 SO가 허락하자마자 그것을 받아 들일 것이다. – higginbotham

    +0

    내가 실제로 사용했던 것은 "grep -A2 'POST를 시작한 것입니다. * \/[fr]'log/production.log | grep -v Processing". 이유는 "매개 변수"줄 앞에 "처리 중"으로 시작하는 줄이 있기 때문에 그냥 sed를 사용하여 그 처리 방법을 알아낼 수 없었기 때문입니다. – higginbotham

    +0

    'sed -n '/ POST를 시작했습니다. \/[fr]/{N;/Parametrs/{s /.* \ n //; p}}' ' – rush

    2

    이것은 원하는 것을 수행해야합니다 :

    sed -n '/Started POST.*\/[fr]/h;/Parameters/{H;g;p;q}' 
    

    첫 번째 줄을 포함하고 "Parameters"가 포함 된 줄을 인쇄합니다. 첫 번째 행 집합 만 인쇄됩니다.

    +0

    "Started"에 일치하는 줄 다음에 오는 첫 번째 매개 변수가 아닌 "매개 변수"* \/[fr]/ – higginbotham

    +0

    @higginbotham :'p' 다음에'q'를 추가하십시오. 내 대답을 업데이트 할게. –

    +0

    감사합니다. 나는 두 가지 대답을 받아 들일 수 있었으면 좋겠다. – higginbotham

    관련 문제