sed cu șir literal–nu cu fișier de intrare (Programare, Linux, Unix, Sed)

amphibient a intrebat.
a intrebat.

Acest lucru ar trebui să fie ușor: vreau să execut sed cu un șir literal, nu cu un fișier de intrare. Dacă vă întrebați de ce, este pentru a edita, de exemplu, valori stocate în variabile, nu neapărat date text.

Când o fac:

sed 's/,/','/g' "A,B,C"

unde A,B,C este literalul pe care vreau să îl schimb în A’,’B’,’C

obțin

Can't open A,B,C

Ca și cum ar crede că A,B,C este un fișier.

Am încercat să o trimit la echo:

echo "A,B,C" | sed 's/,/','/g' 

Primesc un prompt.

Care este modalitatea corectă de a face acest lucru?

3 răspunsuri
Gilles Quenot

Aveți un conflict de ghilimele simple, deci utilizați:

 echo "A,B,C" | sed "s/,/','/g"

Dacă utilizați , puteți face și voi (<<< este un here-string):

sed "s/,/','/g" <<< "A,B,C"

dar nu

sed "s/,/','/g"  "A,B,C"

pentru că sed se așteaptă ca fișierul(ele) ca argument(e)

EDITARE:

dacă utilizați sau oricare altele :

echo string | sed ...

Comentarii

  • ciudat, nu funcționează pentru mine… realizând că este ceva timp în urmă acest lucru a fost postat, dar depreciere ciudat dacă aceasta este problema –  > Por supererou.
ferrants

Funcționează așa cum vrei tu:

echo "A,B,C" | sed s/,/','/g

phyatt

Versiunea mea folosind variabile într-un script bash:

Găsiți orice backslash-uri și înlocuiți-le cu slash-uri înainte:

input="This has a backslash \"

output=$(echo "$input" | sed 's,\,/,g')

echo "$output"

Tags:, ,