문제

http 응답을 오염시키는 파일을 두 개의 파일로 분할하고 싶습니다 : 하나는 HTTP 헤더 만 포함하고 하나는 메시지 본문을 오염시킵니다. 이를 위해서는 첫 번째 빈 줄에 파일을 두 개로 분할해야합니다 (또는 Cr = '만 포함하는 첫 번째 줄의 Unix 도구의 경우.\r'문자) 사용 a 쉘 스크립트.

휴대용 방식으로 수행하는 방법 (예 : 사용 sed, 그러나 GNU 확장이 없음)? 빈 줄은 파일의 첫 번째 줄이 아니라고 가정 할 수 있습니다. 빈 줄은 파일 중 어느 것도 또는 둘 다도 얻을 수 있습니다. 나에게는 중요하지 않습니다.

도움이 되었습니까?

해결책

$ cat test.txt
a
b
c

d
e
f
$ sed '/^$/q' test.txt 
a
b
c

$ sed '1,/^$/d' test.txt 
d
e
f

변경 /^$/ 에게 /^\s*$/ 빈 라인에 공백이있을 수 있습니다.

다른 팁

당신이 사용할 수있는 csplit:

echo "a
b
c

d
e
f" | csplit -s - '/^$/'

또는

csplit -s filename '/^$/'

( "Filename"의 내용이 Echo의 출력과 동일하다고 가정하면이 경우 "xx00"과 "xx01"이라는 두 개의 파일이 생성됩니다. 접두사는 예를 들어 다음과 같이 "xx"에서 "Outfile"으로 변경 될 수 있습니다. -f outfile 그리고 파일 이름의 숫자 숫자는 3으로 변경 될 수 있습니다. -n 3. Macintosh 라인 엔딩을 처리 해야하는 경우 더 복잡한 동정인을 사용할 수 있습니다.

빈 줄에 파일을 분할하려면 다음을 사용할 수 있습니다.

csplit -s filename '/^$/' '{*}'

패턴 '{*}' 앞의 패턴을 가능한 여러 번 반복하게합니다.

AWK 스크립트가 주어졌습니다

BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }

awk -f foo.awk < httpfile 두 파일을 작성합니다 headers 그리고 body 당신을 위한.

파일의 첫 번째 부분 (HTTP 헤더)을 다음과 같이 추출 할 수 있습니다.

awk '{if($0=="")exit;print}' myFile

그리고 두 번째 부분 (HTTP 본체)은 다음과 같습니다.

awk '{if(body)print;if($0=="")body=1}' myFile
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top