كيفية تقسيم الملف على أول سطر فارغ في المحمولة في شل (مثلا ، باستخدام sed)?
-
10-07-2019 - |
سؤال
أريد أن تقسيم ملف containg استجابة HTTP إلى ملفين:واحدة تحتوي فقط رؤوس HTTP, واحد containg الجسم من رسالة.لهذا أنا بحاجة إلى تقسيم الملف إلى اثنين على أول سطر فارغ (أو أدوات يونكس في أول السطر الذي يحتوي فقط CR = '\r
'شخصية) باستخدام شيل.
كيف نفعل هذا في المحمولة الطريقة (على سبيل المثال باستخدام sed, ولكن دون جنو امتداد)?يمكن للمرء أن نفترض أن سطر فارغ لن يكون أول سطر في الملف.سطر فارغ يمكن أن حصلت إما لا شيء أو كل من الملفات ؛ لا يهم بالنسبة لي.
المحلول
$ 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 '/^$/'
(على افتراض محتويات "اسم الملف" هي نفس الناتج الصدى) ، في هذه الحالة ، ملفين اسمه "xx00" و "xx01".البادئة يمكن تغييرها من "xx" إلى "outfile" ، على سبيل المثال ، -f outfile
و عدد من الأرقام في ملف يمكن أن تتغير إلى 3 مع -n 3
.يمكنك استخدام أكثر تعقيدا regex إذا كنت بحاجة إلى التعامل مع ماكنتوش خط النهايات.
لتقسيم الملف في كل سطر فارغ يمكنك استخدام:
csplit -s filename '/^$/' '{*}'
نمط '{*}'
الأسباب السابقة نمط يتكرر عدة مرات ممكن.
نظرا awk النصي
BEGIN { fout="headers" }
/^$/ { fout="body" }
{ print $0 > fout }
awk -f foo.awk < httpfile
كتابة الملفين headers
و body
بالنسبة لك.
يمكنك استخراج الجزء الأول من الملف الخاص بك (HTTP headers) مع:
awk '{if($0=="")exit;print}' myFile
و الجزء الثاني (HTTP الجسم) مع:
awk '{if(body)print;if($0=="")body=1}' myFile