다음 명령을 리팩터링하려고 합니다.
tail -f production.log |
grep -e "Processing " -e "compatible;" -e "Completed in " -e
다음은 명령의 출력입니다.
BasketController#cross_sell_product 처리(2011-08-03 12:46:07의 85.189.237.x) [POST] "RequestLog", "2011-08-03 12:46:07", "12595", " www. website.com","/basket/cross_sell_product/113","85.189.237.x","Mozilla/5.0 (호환 가능; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)" 0.07853에서 완료됨( 요청 12개/ 두 번째) | 렌더: 0.01402 (17%) | DB: 0.01439 (18%) | 200 OK [https://www.website.com/basket/cross_sell_product/113]
이것은 훌륭하고 정확히 제가 원하는 것이지만, 로그를 덩어리로 연구할 수 있도록 나중에 한두 번의 반환을 보고 싶습니다.
\n
마지막에 추가하려고 시도했지만 작동하지 않았습니다.
답변1
당신이 원하는 것이 무엇인지 잘 모르겠지만 awk는 아마도 쉽게 할 수 있을 것입니다. 일치하는 각 줄 뒤에 추가 줄 바꿈을 추가하려면 다음을 수행하십시오.
tail -f production.log |
awk '/Processing|compatible;|Completed in / {print; print ""}'
일치하는 줄의 연속되지 않은 모든 블록 사이에 줄 바꿈을 추가하려면 다음을 수행하십시오.
tail -f production.log |
awk '
/Processing|compatible;|Completed in / {
if (NR == n+1) print "";
n = NR;
print;
}'
답변2
grep
빈 줄은 어떤 패턴과도 일치하지 않으므로 필터링됩니다. 원본 파일에 빈 줄 구분 기호가 있는 경우 -e "^$"
.
이러한 빈 줄이 원본 파일에 없으면 추가해야 합니다. 이를 수행하는 방법의 예는 다음과 같습니다.
tail -f production.log | grep -e … | sed 's/\(^Processing \)/\n\1/'
편집하다:빈 줄을 원할 경우모든대신 다른 라인이 sed 's/$/\n/'
사용됩니다. 물론 \n
원하는 만큼 추가할 수 있습니다.