Saya memiliki skrip yang mencantumkan sekelompok file yang cocok dengan kriteria tertentu. Ini menghasilkan nama file saja dan ada banyak teks yang tidak perlu.
Contoh string adalah:
[gg]_Magi_-_13_[DB38165F].mkv
Apa yang ingin saya capai dalam output adalah:
[gg]_Magi_-_13
Saya sudah bisa mengganti garis bawah tapi saya tidak berhasil memotong [CRC32] .mkv berhasil.
Saya juga membatasi jumlah karakter dan menempatkan ellipsis di bagian akhir jika mereka melampaui 28 karakter tetapi bahkan jika tidak melampaui 28 karakter, itu masih menambahkan ellipsis di akhir.
Kode untuk itu adalah:
print substr( $0, 0, 28 )"[…]"}
Bantuan untuk salah satu dari masalah ini akan sangat dihargai.
[blahblah] blahblahblahblahblah 01
dan[blahblah] blahblahblahblahblah 02
keduanya menjadi[blahblah] blahblahblahblahb...
(tidak ada file yang berbeda)Jawaban:
Saya pikir solusi terpendek untuk memenuhi semua kriteria adalah yang ini
sumber
bash
akan melakukannya juga, yang bisa dibilang lebih pendek, belum lagi lebih cepat. Lihat Jawabanku .Bit pertama menghapus
_[blah].mkv
, dan bit kedua mencetak 28 karakter pertama, dan menempatkan...
pada akhirnya - tetapi jika string kurang dari 28 karakter, itu hanya mencetak nama file yang dilucuti, tanpa menambahkan elips.Jika ekstensi file tidak selalu menjadi * .mkv, Anda dapat menggunakan ini (sebagai tambahan,
$
berarti 'sampai akhir baris'):sumber
sed
sedikit berlebihan untuk manipulasi string yang cukup mendasar. Lihat Jawabanku untuk dua baris murnibash
yang mencapai hasil yang sama.Meskipun
awk
,sed
dan perusahaan memiliki kelebihan mereka, mereka tidak diperlukan untuk ini. Anda dapat dengan mudah mencapai semua yang Anda minta hanya dengan menggunakanbash
operasi string dan pencocokan pola. Dengan asumsi Anda telah menetapkan nama file Anda$name
:akan memotong jenis file dan mengurutkan dari CRC
$name
. Jika Anda perlu memastikan 100% bahwa Anda hanya memotong CRC, Anda dapat menggunakan regex yang diperluas daripada yang di atas:Pemotongan nama yang lebih dari 28 karakter kemudian dicapai dengan:
- dua baris
bash
total (tidak termasuk logika, loop atau lainnya, untuk mendapatkan nama file Anda ke var, dan kode output, tentu saja), tanpa eksternal. Keuntungan utama adalah bahwa kodenya sangat cepat, karena shell tidak pernah harus meluncurkan binari eksternal.sumber
Coba fungsi bash ini (peringatan: tidak diuji):
sumber
Bukan solusi terbersih tetapi Anda bisa melakukan ini:
EDIT: Meh, goreskan jawaban ini. Itu tidak akan memberimu elipsis.
sumber