GNU/Linux >> Belajar Linux >  >> Linux

Mengupas tanda kutip tunggal dan ganda dalam sebuah string hanya menggunakan perintah bash / standar Linux

Ini harus melakukannya:

sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt

Di mana in.txt adalah:

"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od

Dan yang diharapkan.txt adalah:

"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od

Anda dapat memeriksa kecocokannya dengan:

diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt

Anda bisa menggunakan tr :

echo "$string" | tr -d 'chars to delete' 

... juga berfungsi, namun 'tr' diketahui bermasalah pada distribusi yang jauh lebih tua (sekitar Redhat 9-ish). tr adalah singkatan dari 'translate', biasanya digunakan dalam pipa untuk mengubah input. -d opsi berarti 'hapus'.

Sebagian besar versi modern juga berisi makro yang telah ditentukan sebelumnya untuk mengubah atas ke bawah, bawah ke atas, mematikan ruang putih, dll. Oleh karena itu, jika Anda menggunakannya, luangkan waktu sejenak untuk melihat apa lagi yang dilakukannya (lihat keluaran bantuan / halaman manual), sangat berguna.


VAR="'FOOD'"

VAR=$(eval echo $VAR)

Penjelasan:Karena tanda kutip sudah dipahami oleh shell, Anda dapat meminta shell untuk mengevaluasi perintah yang hanya menggemakan string yang dikutip, dengan cara yang sama saat Anda mengetiknya sendiri.

Di sini, eval echo $VAR diperluas ke eval echo 'FOOD' karena tanda kutip sebenarnya adalah bagian dari nilai VAR . Jika Anda menjalankan echo 'FOOD' ke dalam shell Anda akan mendapatkan FOOD (tanpa tanda kutip). Itulah eval tidak:mengambil inputnya dan menjalankannya seperti perintah shell.

⚠INJEKSI KODE!

eval memaparkan skrip ke injeksi kode.

VAR=';ls -l'

VAR=$(eval echo $VAR)

akan menyebabkan eksekusi ls -l .

Kode yang jauh lebih berbahaya dapat disuntikkan di sini.


Linux
  1. Perintah Linux:pekerjaan, bg, dan fg

  2. Linux – Direktori Standar Dan/atau Umum Pada OS Unix/linux?

  3. Cara Mengatur Prioritas Proses Linux Menggunakan Perintah Nice dan renice

  1. perintah bash alias dengan tanda kutip tunggal dan ganda

  2. Apa itu double dot(..) dan single dot(.) di Linux?

  3. menggunakan acak untuk menghasilkan string acak di bash

  1. Periksa Ruang Disk di Linux Menggunakan Perintah df dan du

  2. 5 perintah Linux yang akan saya mulai gunakan

  3. Menggunakan perintah Sed,ex &Perl untuk menemukan dan mengganti teks di Linux