คำถามไม่มากก็น้อยบอกว่ามันทั้งหมด ฉันทราบว่า/^$/d
จะลบบรรทัดว่างทั้งหมด แต่ฉันไม่เห็นวิธีพูดว่า 'แทนที่บรรทัดว่างสองบรรทัดขึ้นไปด้วยบรรทัดว่างเดียว'
ความคิดใด ๆ
คำถามไม่มากก็น้อยบอกว่ามันทั้งหมด ฉันทราบว่า/^$/d
จะลบบรรทัดว่างทั้งหมด แต่ฉันไม่เห็นวิธีพูดว่า 'แทนที่บรรทัดว่างสองบรรทัดขึ้นไปด้วยบรรทัดว่างเดียว'
ความคิดใด ๆ
คำตอบ:
ถ้าคุณไม่ได้ยิงเป็นกลุ่มหรือ sed สำหรับบางใช้งานอื่น ๆ cat -s
แมวจริงมีวิธีที่ง่ายในตัวที่จะยุบบรรทัดว่างหลายเพียงแค่การใช้งาน
หากคุณอยู่ในกลุ่มแล้วและต้องการที่จะอยู่ที่นั่นคุณสามารถทำได้ด้วยการค้นหาภายในและแทนที่ด้วยการออก: :%s!\n\n\n\+!^M^M!g
(^ M คือการแสดงภาพของบรรทัดใหม่คุณสามารถป้อนมันโดยกดปุ่มCtrl+ vEnter) หรือช่วยตัวเอง พิมพ์โดยใช้ปลอกกระสุนแมว: :%!cat -s
.
:%!cat -s
สำหรับ เรียนรู้สิ่ง GNnew ทุกวัน!
%s!\n\n\n\+!\r\r!g
ใช้\n
เพื่อระบุบรรทัดใหม่ในรูปแบบการค้นหา ใช้Ctrl+ Mในข้อความแทนหรือ backreference ดู:help pattern
และ:help sub-replace-special
(เชื่อมโยงจาก:help :s
)
%s/\(\n\n\)\n\+/\1/
\n
ไม่ทำงานในข้อความแทนที่
หากอยู่ในกลุ่มให้ทำดังนี้
:%!cat -s
man
หน้า
ใช้ Perl:
perl -00 -pe ''
-00
ตัวเลือกบรรทัดคำสั่งเปิดโหมด slurp ย่อหน้าหมายถึง Perl อ่านย่อหน้าข้อความตามย่อหน้าแทนที่จะเป็นบรรทัดต่อบรรทัด
ด้วย sed (GNU sed) 4.2.2:
sed -r '
/^\s*$/ {
# blank line
:NEXT
N # append next line to pattern space - if none, autoprint PS and exit
s/^\s*$\n^\s*$//g;t NEXT # if 2 blank lines, clear PS and loop to NEXT
}
# else, autoprint PS and next/exit
' < $MYFILE
ฉันรู้ว่านี่เป็นรหัสโง่ แต่ฉันต้องการแก้ปัญหานี้ในเวลาน้อยกว่า 10 นาทีและใช้งานได้
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniq
ลบบรรทัดเท่ากับที่อยู่ติดกัน ซึ่งไม่ใช่สิ่งที่ OP ต้องการ
-s
ตัวเลือกของแมว - แค่บันทึกประวัติศาสตร์มันไม่ได้อยู่ใน POSIX แต่ดูเหมือนว่าจะมีอยู่ในแมว BSD และ GNU