شل: طريقة بسيطة للحصول على كل خطوط قبل سطر فارغ الأول
سؤال
ما هو أفضل قذيفة القيادة لإخراج خطوط ملف حتى واجهت أول سطر فارغ؟ على سبيل المثال:
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
لا تنتمي إلى StackOverflow