로그 파일이 있고 일련의 줄 끝에서 블록이 관련이 있는지 확인할 수 있습니다. 이제 "Content-Length: 0"으로 끝나고 해당 줄 앞의 마지막 "--"으로 시작하는 블록을 제거하는 sed와 같은 명령을 찾고 있습니다.
시도했지만 sed -n "/--/,/Content-Length: 0/d"
첫 번째 "--"와 첫 번째 "Content-Length: 0"을 가져와 제거했습니다.
전임자:
line 1 "--"
line 2
line 3 "Content-Length: 20"
line 4 "--"
line 5
line 6 "Content-Length: 0"
1~6행이 아닌 4,5,6행을 삭제하고 싶습니다.
어떻게 해야 하나요?
대답은 작업을 완료하는 tac
것이 아니라 를 사용하는 것입니다! 하지만 결국에는 건축에 사용하고 cat
싶어요tail -f
답변1
다음은 사용되는 한 가지 방법입니다 GNU sed
.
sed -n '/--/,/Content-Length: 0/ { H; /Content-Length: 0/ { g; s/\n\(.*\)\n.*--.*/\1/p } }'
결과:
line 1 "--"
line 2
line 3 "Content-Length: 20"
설명하다:
Match between the pattern range. Append this range to the hold space. On the last
line of the range, copy the hold space to pattern space to work with it. Then use
find/replace regex to remove everything after the last occurrence of '--'. HTH.
답변2
노력하다
sed -n "N;s/--.*Content-Length: 0//;P"
답변3
tac 명령이 존재하는 경우 tac을 사용하여 역방향 모드를 확인할 수 있습니다.
tac file | sed "/Content-Length: 0/,/--/d" | tac
답변4
다음을 수행할 수 있습니다.
sed 'H;/^--$/h;/Content-Length.*[1-9]/!d;g'
공간을 보존하기 위해 각 줄을 추가합니다. 마커 --
라인은 예약된 공간을 덮어쓰므로 --
각 패스마다 새 버퍼를 사용할 수 있습니다.콘텐츠조각. 이 문자열을 포함하지 않는 모든 줄콘텐츠 길이그런 다음 어느 시점에서 그 뒤에 0이 아닌 숫자가 하나 이상 따라오고 삭제됩니다. 따라서 예약된 공간을 다시 패턴 공간에 넣고 인쇄할 수 있는 유일한 기회는 g
일치하는 라인에 있습니다.콘텐츠 길이그 다음에0이 아닌 숫자이 시점에서 마지막 줄 이후의 모든 줄이 --
인쇄됩니다.