Saya punya satu set file yang berisi catatan yang ditulis dalam urutan terbalik:
###### 27/07/2016-15:04:20 GMT+1:
Really? More?
###### 27/07/2016-15:04:18 GMT+1:
It happened again!
###### 27/07/2016-15:04:16 GMT+1:
A thing happened
Saya ingin mereka tampil dalam urutan ini:
###### 27/07/2016-15:04:16 GMT+1:
A thing happened
###### 27/07/2016-15:04:18 GMT+1:
It happened again!
###### 27/07/2016-15:04:20 GMT+1:
Really? More?
Beberapa file ini memiliki beberapa ratus entri - apa cara termudah untuk mewujudkannya?
vim
emacs
regex
text-editors
Joe
sumber
sumber
Jawaban:
Hanya tac
Perintah
tac
dapat melakukannya.Panggil tac oleh Vim
Jika Anda ingin menjalankannya di Vim:
%
berarti semua baris.!
menjalankan perintah eksternal .Backslash perlu untuk melarikan diri dari tanda nomor
#
di"\#\#\#\#\#\#"
.Hanya Vim
Perintah-perintah ini menggantikan baris baru dengan tab. Jika tab ada di log, gunakan karakter lain sebagai ganti tab.
sumber
Jika ada baris baru akhir di akhir, perintah berikut melakukan apa yang Anda inginkan di Vim:
Pencarian baris yang dimulai dengan
###
mengambil rentang dari###
hingga baris kosong berikutnya dan memindahkannya ke atas.Jika tidak ada baris baru final, itu mungkin akan dibatalkan dengan misalnya
E16: invalid range
, dalam hal ini Anda dapat menyesuaikan regex seperti ini:Namun, du ke baris terakhir yang hilang, entri pertama tidak akan memiliki baris baru sesudahnya, jadi setelah semua itu mungkin lebih mudah untuk hanya menambahkan satu baris kosong, tambahkan akhir dan gunakan perintah pertama.
sumber
######
, seperti:g/^###/,/^###/-1m 0
? Apa tujuan dari titik.
dalam kode Anda?:g/^###/;/\(\n###\|\%$\)/m0
bekerja untukku.