Pertanyaan kurang lebih mengatakan itu semua. Saya sadar bahwa /^$/d
akan 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 /^$/d
akan 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 \n
untuk menunjukkan baris baru dalam pola pencarian. Gunakan Ctrl+ Mdalam teks pengganti, atau referensi-ulang. Lihat :help pattern
dan :help sub-replace-special
(ditautkan dari :help :s
).
%s/\(\n\n\)\n\+/\1/
\n
tidak berfungsi dalam teks pengganti.
Jika di Vim, lakukan saja ini:
:%!cat -s
man
halaman.
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
uniq
menghapus garis sama yang berdekatan. Bukan itu yang diinginkan OP.
-s
opsi kucing - hanya catatan bersejarah, tidak dalam POSIX, tetapi tampaknya tersedia di kucing BSD dan GNU.