Pertanyaan kurang lebih mengatakan itu semua. Saya sadar bahwa /^$/dakan menghapus semua baris kosong, tetapi saya tidak bisa melihat bagaimana mengatakan 'ganti dua atau lebih baris kosong dengan satu baris kosong'
Ada ide?
Pertanyaan kurang lebih mengatakan itu semua. Saya sadar bahwa /^$/dakan menghapus semua baris kosong, tetapi saya tidak bisa melihat bagaimana mengatakan 'ganti dua atau lebih baris kosong dengan satu baris kosong'
Ada ide?
Jawaban:
Jika Anda tidak menggunakan vim atau sed untuk penggunaan lainnya, kucing sebenarnya memiliki cara mudah untuk meruntuhkan banyak garis kosong, cukup gunakan cat -s.
Jika Anda sudah berada di vim dan ingin tetap di sana, Anda dapat melakukan ini dengan pencarian internal dan ganti dengan mengeluarkan: :%s!\n\n\n\+!^M^M!g(^ M adalah representasi visual dari baris baru, Anda dapat memasukkannya dengan menekan Ctrl+ vEnter), atau menyimpan sendiri mengetik dengan hanya shelling out untuk kucing: :%!cat -s.
:%!cat -s. Pelajari sesuatu GNnew setiap hari!
%s!\n\n\n\+!\r\r!g
Gunakan \nuntuk menunjukkan baris baru dalam pola pencarian. Gunakan Ctrl+ Mdalam teks pengganti, atau referensi-ulang. Lihat :help patterndan :help sub-replace-special(ditautkan dari :help :s).
%s/\(\n\n\)\n\+/\1/
\ntidak berfungsi dalam teks pengganti.
Jika di Vim, lakukan saja ini:
:%!cat -s
manhalaman.
Menggunakan Perl:
perl -00 -pe ''
-00 opsi baris perintah mengaktifkan mode slurp paragraf, yang berarti Perl membaca paragraf teks demi paragraf daripada baris demi baris.
Dengan sed (sed GNU) 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
Saya tahu ini adalah kode yang konyol, tetapi saya ingin menyelesaikan masalah ini dalam waktu kurang dari 10 menit, dan itu berhasil
for file in /directory/*
do
originalname=$file
us='_'
tempname=$file$us
echo $originalname
mv $originalname $tempname
uniq $tempname $originalname
rm $tempname
done
uniqmenghapus garis sama yang berdekatan. Bukan itu yang diinginkan OP.
-sopsi kucing - hanya catatan bersejarah, tidak dalam POSIX, tetapi tampaknya tersedia di kucing BSD dan GNU.