GNU/Linux >> Znalost Linux >  >> Linux

Odstraňování jednoduchých a dvojitých uvozovek v řetězci pouze pomocí bash / standardních příkazů Linuxu

Mělo by to stačit:

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

Kde je in.txt:

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

A očekávaný.txt je:

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

Můžete zkontrolovat, zda se shodují s:

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

Můžete použít tr :

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

... také funguje, nicméně je známo, že 'tr' je problematické na mnohem starších (cca Redhat 9-ish) distribucích. tr je zkratka pro 'přeložit', běžně používaná v potrubí k transformaci vstupu. -d volba jednoduše znamená 'smazat'.

Většina moderních verzí také obsahuje předdefinovaná makra pro transformaci horního na dolní, dolní na horní, zabití prázdného místa atd. Pokud to tedy používáte, chvíli se dívejte na to, co ještě dělá (viz výstup nápovědy / manuálová stránka), přijde vhod.


VAR="'FOOD'"

VAR=$(eval echo $VAR)

Vysvětlení:Vzhledem k tomu, že shell již rozumí uvozovkám, můžete shell požádat, aby vyhodnotil příkaz, který pouze opakuje řetězec v uvozovkách, stejným způsobem, jako když jej napíšete sami.

Zde eval echo $VAR expanduje na eval echo 'FOOD' protože uvozovky jsou ve skutečnosti součástí hodnoty VAR . Pokud byste spustili echo 'FOOD' do shellu byste dostali FOOD (bez uvozovek). To je to, co eval dělá:vezme jeho vstup a spustí jej jako příkaz shellu.

⚠INJEKCE KÓDU!

eval vystavit skripty vkládání kódu.

VAR=';ls -l'

VAR=$(eval echo $VAR)

způsobí spuštění ls -l .

Dalo by se sem vložit mnohem více škodlivých kódů.


Linux
  1. Linuxové příkazy:jobs, bg a fg

  2. 5 Linuxových příkazů, které začnu používat

  3. Zabalit příkaz, který obsahuje jednoduché a dvojité uvozovky pro jiný příkaz?

  1. Použití Linux Sleep Command ve skriptech Bash

  2. Jak nastavit prioritu procesu Linux pomocí příkazů nice a renice

  3. příkaz bash alias s jednoduchými i dvojitými uvozovkami

  1. Jak přenášet soubory mezi dvěma počítači pomocí příkazů nc a pv

  2. Linuxové příkazy – přehled a příklady

  3. Co je dvojitá tečka (..) a jedna tečka (.) v Linuxu?