Bagaimana cara menggunakan sed di Linux untuk mendapatkan nilai dari nama file?

1

Bagaimana saya bisa mengambil setiap bagian secara terpisah dari nama file berikut?

DSA4020_frontcover_20346501_2011-05.doc

Saya ingin mengambil informasi seperti di bawah ini:

name = DSA4020
type = frontcover
id =  20346501
date = 2011-05

Apakah mungkin untuk melakukan ini dengan sed?

Himalay
sumber
Mengapa menggunakan sed ketika Anda bisa menggunakan cut (atau awk)?
Isaac Clarke
tidak masalah apakah dipotong atau canggung. Saya hanya perlu nilai-nilai itu. tolong bantu saya. Terima kasih!
Himalay
Lihat posting Anda di stackoverflow.com
Pangeran John Wesley
selesai !! Terima kasih. :) dan terima kasih kepada @eduffy juga
Himalay

Jawaban:

1

Bagaimana dengan sedresep ini?

echo "DSA4020_frontcover_20346501_2011-05.doc" \
 | sed | \ ([^ _] * \) _ \ ([^ _] * \) _ \ ([^ _] * \) _ \ ([^ \.] * *). * | name = \ 1, ketik = \ 2, id = \ 3, date = \ 4 | '

memberikan formulir CSV yang bagus ini,

name = DSA4020, type = frontcover, id = 20346501, tanggal = 2011-05
nik
sumber
0

Anda dapat menggunakan yang berikut ini untuk membagi di setiap _ setelah menghapus ekstensi:

$ echo "DSA4020_frontcover_20346501_2011-05.doc" | cut -d. -f-1 | cut -d_ -f1
DSA4020

Ganti digit terakhir dengan 2, 3, 4 untuk mendapatkan nilai individu setiap kali.

Daniel Beck
sumber
0

Jika jumlah bidangnya konstan:

for i in 1 2 3 4 5; do  
    VARS[${i}]=$(echo ${yourfilename} | cut -d _ -f${i})
done

Kemudian akses $ {VARS [i]} ...

Alternatif:

VARS[${i}]=$(echo ${yourfilename} | awk -v i=${i} -F_ '{print $i}'

Dan jika didukung (bash 3+)

for i in {1..5}; do (...)

Jika Anda memiliki beberapa nama file, cukup tambahkan satu forlingkaran untuk membaca sekilas semuanya.

Isaac Clarke
sumber
Itu hanya empat bidang.
Daniel Beck
Rutin pengujian saya adalah lima bidang: PI berharap OP cukup pintar untuk memahami dan memperbaiki jika diperlukan.
Isaac Clarke
Saya baru saja memperhatikan, ini juga tidak menghapus ekstensi file, bukan?
Daniel Beck
0

Pisahkan nama file dan simpan dalam parameter posisi:

set -- $(sed 's/_/ /g' <<< ${filename%.doc})
name=$1
type=$2
id=$3
date=$4
glenn jackman
sumber
Tidak memotong ekstensi file.
Daniel Beck
@Daniel, bagian ini akan menghapus ekstensi ".doc":${filename%.doc}
glenn jackman
Maaf tentang itu, tidak menyadarinya.
Daniel Beck
0

Coba ini:

echo "DSA4020_frontcover_20346501_2011-05.doc" | awk -F '_' '{print " name =" $1 "\n type =" $2 "\n id =" $3 "\n date =" $4 } '

output akan seperti ini:

name = DSA4020
type = frontcover
id = 20346501
date = 2011-05
Rainvin
sumber