Misalkan saya memiliki daftar URL dalam file teks:
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
Saya ingin menghapus semua yang muncul setelah '.com'.
Hasil yang diharapkan:
google.com
unix.stackexchange.com
isuckatunix.com
Saya mencoba
sed 's/.com*//' file.txt
tapi itu dihapus .com
juga.
text-processing
sed
Koshur
sumber
sumber
.com
hanya alih-alih menghapus semuanya setelah dan termasuk/
karakter pertama ? Bagaimana jika Anda memiliki URL sepertien.wikipedia.org/wiki/Ubuntu
di daftar Anda?Jawaban:
Untuk secara eksplisit menghapus semua yang muncul setelah ".com", cukup atur solusi sed yang ada untuk mengganti ".com (apa saja)" dengan ".com":
Saya men-tweak regex Anda untuk menghindari periode pertama; kalau tidak, itu akan cocok dengan sesuatu seperti "thisiscommon.com/something".
Perhatikan bahwa Anda mungkin ingin lebih jauh mengaitkan pola ".com" dengan garis miring ke belakang sehingga Anda tidak sengaja memotong sesuatu seperti "sub.com.domain.com/foo":
sumber
Anda dapat menggunakan
awk
pemisah bidang (-F
) dengan cara berikut:Penjelasan:
Karena Anda ingin menghapus semua hal setelahnya
.com
,-F '.com'
pisahkan baris dengan.com
danprint $1
hanya berikan keluaran bagian sebelumnya.com
. Jadi,$1".com"
tambahkan.com
dan beri Anda hasil yang diharapkan.sumber
/
seperti FS dan ambil bidang pertama?acomercial.com/asdsad
Alat terbaik untuk mengedit file di tempat non-interaktif adalah
ex
.Jika Anda telah menggunakan
vi
dan jika Anda pernah mengetik perintah yang dimulai dengan titik dua:
Anda telah menggunakan perintah ex. Tentu saja banyak dari perintah yang lebih maju atau "mewah" yang dapat Anda lakukan dengan cara ini adalah ekstensi Vim (mis.:bufdo
) Dan tidak ditentukan dalam spesifikasi POSIX untukex
, tetapi spesifikasi tersebut memungkinkan untuk tingkat daya dan fleksibilitas yang benar-benar menakjubkan di non-visual. pengeditan teks (apakah interaktif atau otomatis).Perintah di atas memiliki beberapa bagian.
-s
memungkinkan mode hening untuk mempersiapkanex
penggunaan bets. (Menekan pesan output dkk.)-c
menentukan perintah untuk mengeksekusi setelah file (file.txt
, dalam kasus ini) dibuka di buffer.%
adalah specifier alamat yang setara dengan1,$
— itu berarti bahwa perintah berikut diterapkan ke semua baris buffer.s
adalah perintah pengganti yang mungkin sudah Anda kenal. Ini biasa digunakan divi
dan pada dasarnya memiliki fitur yang identik dengans
perintahsed
, meskipun beberapa fitur regex canggih dapat bervariasi berdasarkan implementasi. Dalam hal ini dari ".com" hingga akhir baris diganti dengan hanya ".com".Bilah vertikal memisahkan perintah berurutan yang akan dieksekusi. Dalam banyak (sebagian besar)
ex
implementasi, Anda juga dapat menggunakan-c
opsi tambahan , seperti:Namun, ini tidak diperlukan oleh POSIX.
The
x
perintah keluar, setelah menulis perubahan ke file. Berbeda denganwq
yang berarti "menulis dan berhenti",x
hanya menulis ke file jika buffer telah diedit. Jadi, jika file Anda tidak diubah, stempel waktu akan dipertahankan.sumber
sed
palsu Gnu - saya lakukan. Itu membaca / menulis ke buffer pada disk. Lihat sendiri w /ex -r
danpreserve
perintahnya.preserve
perintahnya?Cara python yang sangat cepat, sederhana dan kotor:
Contoh dijalankan
sumber
.com
, hanya menghapus semuanya dimulai dengan yang pertama/
di baris. (yang menurut saya bahkan pendekatan yang lebih baik!).net
, dalam pendekatan lain bagian yang datang setelah domain dan ekstensi tidak akan dihapus, jadi lebih aman untuk digunakan/
sebagai pemisah.