Saya terjebak pada bagaimana saya bisa menghapus garis yang lebih baru dari tanggal yang ditentukan. Berikut adalah cuplikan dari isi file.
buildsave.txt
647919 2013/11/30
647946 2013/11/30
647955 2013/12/01
648266 2013/12/03
648267 2013/12/03
648674 2013/12/04
Saya ingin menghapus garis yang lebih baru dari 2013/12/03 hanya menyisakan
647919 2013/11/30
647946 2013/11/30
647955 2013/12/01
Bagaimana ini bisa dilakukan melalui bash?
bash
text-processing
Jason G
sumber
sumber
Tanggal-tanggal itu mengurutkan leksikografis dan kronologis yang sama, jadi itu hanya masalah melakukan perbandingan leksikal:
sumber
Saya berasumsi
<br>
dalam pertanyaan Anda di akhirdate
kolom adalah sesuatu yang tidak diinginkan. Bagaimanapun, itu dapat dihapus dengan mudah jika ada. Namun, datang ke bagian utama Anda dapat mencapai apa yang Anda coba lakukan dengan menggunakan,Sekarang, perintah di atas akan memberikan output dengan cara diurutkan. Sekarang, perintah di bawah ini akan memberikan apa yang Anda cari.
Penjelasan
Perintah sortir pada dasarnya mengurutkan file berdasarkan kolom kedua yang merupakan tanggal. Jadi saya memodifikasi file input Anda untuk menguji perintah jika berfungsi karena file input memiliki semua data yang diurutkan secara default. Setelah itu,
awk
perintah mencetak semua baris sampai kita menemukan kecocokan tertentu.Pengujian
Sekarang,
sort -k 2n filename.txt
keluarannya adalah,Sekarang kami puas bahwa file tersebut diurutkan pada kolom kedua. Sekarang, untuk memilih nilai-nilai UPTO pada tanggal tertentu,
Dalam contoh di atas, saya mendapatkan semua nilai upto
2013/12/03
. Outputnya adalah,Tidak,
<br>
ini bagian dari file sayaJika demikian, kita dapat mengubah sedikit perintah seperti di bawah ini.
Jadi saya hanya menghapus semua
<br>
tag dari kolom kedua dan kemudian mengirim perintah yang disebutkan di atas.Referensi
https://unix.stackexchange.com/a/11323/47538
https://unix.stackexchange.com/a/83069/47538
sumber
Solusi cepat dan kotor untuk satu tanggal yang Anda berikan, hapus saja semua baris dengan sed, yang cocok dengan tanggal setelah tanggal ini:
-I "" sedang menggantikan langsung di dalam file dan tidak membuat cadangan, tetapi Anda juga bisa mem-pipe testfile melalui semua 3 perintah sed tanpa -i "".
Bergantung pada sistem Anda (linux atau mac), Anda dapat menonaktifkan "" setelah -i dan kadang-kadang Anda membutuhkan parameter -e untuk ekspresi reguler. Harus mencoba apa yang cocok untuk Anda.
Pertanyaan terkait dengan info lebih lanjut tentang sed: /programming/5410757/
sumber
#
adalah perintah komentarsed
, sehingga mereka tidak akan melakukan apa pun. Gunakansed '\#patter#d'
jika Anda ingin pembatas RE yang berbeda dari/
. Bagian[0-9]*
itu berlebihan tanpa^
jangkar.-e
hanya diperlukan ketika Anda ingin memberikan beberapa ekspresi. linux adalah kernel, mac adalah merek komputer, tidak ada yang ada hubungannya dengansed
. Perbedaannya adalah antara GNUsed
dan FreeBSDsed
(yang OS / X (seperti yang ditemukan pada beberapa mac) diwarisi).