شل: طريقة بسيطة للحصول على كل خطوط قبل سطر فارغ الأول

StackOverflow https://stackoverflow.com/questions/1603389

  •  05-07-2019
  •  | 
  •  

سؤال

ما هو أفضل قذيفة القيادة لإخراج خطوط ملف حتى واجهت أول سطر فارغ؟ على سبيل المثال:

output these
lines

but do not output anything after the above blank line
(or the blank line itself)

وAWK؟ شيء آخر؟

هل كانت مفيدة؟

المحلول

sed -e '/^$/,$d' <<EOF
this is text
so is this

but not this
or this
EOF

نصائح أخرى

وأكثر awk:

awk -v 'RS=\n\n' '1;{exit}'

وأكثر sed:

sed -n -e '/./p;/./!q'
sed -e '/./!{d;q}'
sed -e '/./!Q'   # thanks to Jefromi

وماذا عن مباشرة في قذيفة؟

while read line; do [ -z "$line" ] && break; echo "$line"; done

و(أو printf '%s\n' بدلا من echo، إذا قذيفة الخاص بك هو عربات التي تجرها الدواب، ويعالج هروب. دائما)

# awk '!NF{exit}1' file
output these
lines

ومع الحزب الاشتراكي الموحد:

sed '/^$/Q' <file>

وتحرير: الحوار الاقتصادي الاستراتيجي هو الطريق، الطريقة، بطريقة أسرع. انظر الجواب ephemient لأسرع نسخة.

لقيام بذلك في AWK، تستطيع استعمال:

awk '{if ($0 == "") exit; else print}' <file>

وعلما بأنني عمدا كتبت هذا لتجنب استخدام التعابير العادية. أنا لا أعرف ما AWK لتحسينات داخلية ومثل، ولكن أظن أن المقارنة سلسلة المباشرة يكون أسرع.

وAWK الحل

awk '/^$/{exit} {print} ' <filename>

وهنا الحل باستخدام بيرل:

#! perl

use strict;
use warnings;

while (<DATA>) {
    last if length == 1;
    print;
}

__DATA__
output these
lines

but don't output anything after the above blank line
(or the blank line itself)

زوجان من بيرل واحد المتشددين

$ perl -pe'last if /^$/' file..

$ perl -lpe'last unless length' file..

وحل آخر بيرل:

perl -00 -ne 'print;exit' file
perl -00 -pe 'exit if $. == 2' file
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top