GNU/Linux >> Linux Esercitazione >  >> Linux

Rimozione di virgolette singole e doppie in una stringa utilizzando solo i comandi bash/standard di Linux

Questo dovrebbe farlo:

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

Dove in.txt è:

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

E expected.txt è:

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

Puoi verificare che corrispondano a:

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

Potresti usare tr :

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

... funziona anche, tuttavia 'tr' è noto per essere problematico su distribuzioni molto più vecchie (circa Redhat 9-ish). tr è l'abbreviazione di 'translate', comunemente usata nelle pipe per trasformare l'input. Il -d opzione significa semplicemente 'cancella'.

La maggior parte delle versioni moderne contiene anche macro predefinite per trasformare da superiore a inferiore, da inferiore a superiore, uccidere lo spazio bianco, ecc. torna utile.


VAR="'FOOD'"

VAR=$(eval echo $VAR)

Spiegazione:poiché le virgolette sono già comprese dalla shell, puoi chiedere alla shell di valutare un comando che fa semplicemente eco alla stringa tra virgolette, allo stesso modo in cui lo fa quando lo digiti tu stesso.

Qui, eval echo $VAR si espande in eval echo 'FOOD' perché le virgolette fanno effettivamente parte del valore di VAR . Se dovessi eseguire echo 'FOOD' nella shell otterrai FOOD (senza le virgolette). Questo è ciò che eval fa:prende il suo input e lo esegue come un comando di shell.

⚠INIEZIONE DEL CODICE!

eval esporre gli script all'iniezione di codice.

VAR=';ls -l'

VAR=$(eval echo $VAR)

provocherà l'esecuzione di ls -l .

Codici molto più dannosi potrebbero essere iniettati qui.


Linux
  1. Come trasferire file tra due computer utilizzando i comandi nc e pv

  2. Comandi Linux:job, bg e fg

  3. 5 comandi Linux che inizierò a usare

  4. Stampare una stringa con virgolette singole e altri caratteri speciali?

  5. Linux:directory standard e/o comuni su OS Unix/linux?

Come registrare e riprodurre sessioni del terminale Linux utilizzando i comandi "script" e "scriptreplay".

Come eseguire comandi dall'input standard utilizzando Tee e Xargs in Linux

Come usare bash if -z e if -n per testare le stringhe in Linux

Cerca, studia e fai pratica con i comandi Linux al volo usando Tldr++

Differenza tra virgolette singole e doppie in Bash Shell

usando random per generare una stringa casuale in bash