Parancssorból sikerült összehoznom a kívánt végeredményt, de amikor scriptből szeretném futtatni, akkor hibát jelez.
$ echo "ABC/DEF"|sed -e "s/\//\"'\\\\\/'\"/g"
ABC"'\/'"DEF
A script pedig így nézne ki:
#!/bin/bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin
szoveg="ABC/DEF"
out=`echo "${szoveg}"|sed "s/\//\"'\\\\\/'\"/g"`
echo ${out}
Futtatáskor pedig ezt írja:
sed: -e kifejezés #1, karakter 11: Ismeretlen `s' opció
- 1050 megtekintés
Hozzászólások
Bash manpage a következőket írja a command substitution különböző szintaktikáival kapcsolatban:
When the old-style backquote form of substitution is used, backslash retains its literal meaning except when followed by $, `, or \. The first backquote not preceded by a backslash terminates the command substitution. When using the $(command) form, all characters between the parentheses make up the command; none are treated specially.
- A hozzászóláshoz be kell jelentkezni
Nagyon köszönöm, ez meg is oldotta a gondomat:
out=$(echo "${szoveg}"|sed "s/\//\"'\\\\\/'\"/g")
- A hozzászóláshoz be kell jelentkezni
De ez is működött volna:
out=`echo "${szoveg}"|sed "s/\//\"'\\\\\\\\\\/'\"/g"`
Magam előtt sem világos pontosan, hogy miért. Kicsit olyan, mint az eval, hogy kétszer megy rajta végig a shell, s így minden escape-elt backslash-ből egy darab marad, másodjára is feleződik, ezen felül a sed-nek is kell az escape-elés, így kell aztán csak ehhez 8 darab.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
~~~~~~~~
deb http://deb.uucp.hu/ wheezy yazzy repack
- A hozzászóláshoz be kell jelentkezni
:)
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
#!/bin/sh
szoveg="ABC/DEF"
out=`echo "${szoveg}"|sed 's,\/,\"\\\\/\",g'`
echo ${out}
Kicsit olvashatóbb, ha a /
-jel helyett más karaktert választasz elválasztónak (vagy mi is a pontos neve). A sed
esetén inkább az aposztrófot ('
) választom, mint az idézőjelet ("
), hogy a shell tuti ne akarja változtatni ("védjem a shelltől").
$ echo \\
\
$ echo "\\"
\
$ echo '\\'
\\
$ echo '\'
\
$ echo '\"'
\"
- A hozzászóláshoz be kell jelentkezni
like
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni