Bagaimana saya bisa menghapus semua teks setelah karakter, dalam hal ini titik dua (":"), dalam bash? Bisakah saya menghilangkan usus besar juga? Saya tidak tahu caranya.
147
Contoh mungkin berguna, tetapi jika saya mengerti Anda dengan benar, ini akan berhasil:
echo "Hello: world" | cut -f1 -d":"
Ini akan mengubah "halo: dunia" menjadi "halo".
cut
berfungsi, tetapi jawaban saya Dennis lebih baik dan lebih fleksibel. Apakah ada yang tahu jika itu memunculkan proses barucut
?basename
dancut
, lihat jawaban Dennis di bawah inicut
dapat membaca dari stdin, jadi itu lebih baik terutama ketika Anda memiliki string yang sangat panjang yang perlu Anda proses, seperti isi file.hello: world
. Ini setengah jawaban.Di Bash (dan ksh, zsh, dash, dll.), Anda dapat menggunakan ekspansi parameter
%
yang akan menghapus karakter dari ujung string atau#
yang akan menghapus karakter dari awal string. Jika Anda menggunakan satu dari karakter itu, string pencocokan terkecil akan dihapus. Jika Anda menggandakan karakter, yang terpanjang akan dihapus.sumber
hello:world
menjadihello:wo
dengan menggunakan${a%:*}
?"${a##*:}"
untuk hanya mendapatkantomorrow
=)a='hello:world:of:tomorrow'; pattern=''^([^:]*:).*$'
; [[$ a = ~ $ pattern]]; echo "$ {BASH_REMATCH [1]}" `. Itu cocok hanya jika ada titik dua. Jika Anda ingin itu opsional, pola yang berbeda harus digunakan. Penjelasan tentang regex Bash (dan regex secara umum) berada di luar cakupan komentar ini. Anda dapat menemukan pertanyaan lain yang membahas hal ini atau memposting pertanyaan Anda sendiri.sumber
sumber
egrep
Grep dengan-E
. Tidak ada bedanya di sini dari biasagrep
.-o
menginstruksikan grep untuk mencetak hanya bagian dari garis yang cocok dengan ekspresi.^
jangkar pertandingan ke awal baris.[^:]*
cocok dengan nol atau lebih karakter yang bukan:
karakter.:
cocok dengan karakter:
.Katakanlah Anda memiliki jalur dengan file dalam format ini:
Sekarang Anda hanya menginginkan jalur yang mencakup empat "/". Tipe
dan output Anda akan menjadi
Keuntungan menggunakan cut adalah Anda juga dapat memotong direktori uppest serta file (dalam contoh ini), jadi jika Anda mengetik
output Anda akan menjadi
Meskipun Anda dapat melakukan hal yang sama dari sisi lain dari string, itu tidak masuk akal dalam hal ini sebagai mengetik
hasil dalam
Dalam beberapa kasus lain, kasus terakhir mungkin juga bermanfaat. Pikiran bahwa tidak ada "/" di awal output terakhir.
sumber
potong semuanya setelah contoh terakhir dari ":"
dan jika Anda ingin menjatuhkan yang terakhir ":"
@ kp123: Anda ingin menggantinya
:
dengan/
(di mana seharusnya sed kolon\/
)sumber