11

HTTP応答を含むファイルを2つのファイルに分割したいと思います。1つはHTTPヘッダーのみを含み、もう1つはメッセージの本文を含みます。このために、シェルスクリプト\rを使用して、最初の空の行でファイルを2つに分割する必要があります(または、CR =''文字のみを含む最初の行のUNIXツールの場合)。

ポータブルな方法でこれを行う方法(たとえば、sedを使用しますが、GNU拡張機能は使用しません)?空の行はファイルの最初の行ではないと想定できます。空の行は、ファイルのいずれか、なし、または両方に到達する可能性があります。それは私には関係ありません。

4

4 に答える 4

15

あなたが使用することができますcsplit

echo "a
b
c

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

または

csplit -s filename '/^$/'

(「filename」の内容がechoの出力と同じであると仮定すると)この場合、「xx00」と「xx01」という名前の2つのファイルが作成されます。たとえば、プレフィックスを「xx」から「outfile」に-f outfile変更したり、ファイル名の桁数を。で3に変更したりできます-n 3。Macintoshの行末を処理する必要がある場合は、より複雑な正規表現を使用できます。

空の行ごとにファイルを分割するには、次を使用できます。

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

このパターン'{*}'により、前のパターンが可能な限り繰り返されます。

于 2009-10-29T22:17:23.463 に答える
14
$ 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*$/

于 2009-10-29T15:34:02.563 に答える
4

与えられたawkスクリプト

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

awk -f foo.awk < httpfileheaders2つのファイルを書き出しbodyます。

于 2009-10-29T15:39:20.967 に答える
1

次のコマンドを使用して、ファイルの最初の部分(HTTPヘッダー)を抽出できます。

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

そして2番目の部分(HTTPボディ):

awk '{if(body)print;if($0=="")body=1}' myFile
于 2009-10-29T15:42:29.940 に答える