Există o serie de probleme.
În primul rând, bretele {...}
în expresia ta sed nu se potrivesc cu nimic din intrare. Într-o expresie regulată de bază sed, acoladele sunt literale, în timp ce într-o expresie regulată extinsă ele înconjoară un cuantificator de formă {n,m}
. Ele nu sunt niciodată folosite pentru grupare.
În al doilea rând, secvența ta de culori este defectă - deschiderea trebuie să fie \033[0;34m
Decat \033[0;34
În al treilea rând, caracterul backslash \
este special în sed - în special, o bară oblică inversă urmată de o cifră zecimală pe RHS a unei substituții este o referință inversă la un grup de captură; cel puțin în GNU sed, \0
se referă la întregul LHS capturat echivalent cu jetonul special de înlocuire &
deci de exemplu
$ echo foo | sed 's/foo/\033bar/'
foo33bar
A trece un literal \
spre exterior ecou -e
ai avea nevoie \\
în interiorul șirului de înlocuire a sedului.
In cele din urma, \
este de asemenea special pentru shell, așa că în interiorul ghilimele duble „soft” au nevoie de o bară oblică inversă suplimentară. Deci fie:
echo -e „$(echo „Acesta este un text necolorat” |
sed "s/Acesta este un text necolorat/Acesta este un \033[0;34muncolored text\033[0m/")"
sau (înlocuind ghilimelele interioare cu ghilimele simple „puternice”):
echo -e „$(echo „Acesta este un text necolorat” |
sed 's/Acesta este un text necolorat/Acesta este un \033[0;34muncolored text\033[0m/')"
Rețineți că nu aveți nevoie de g
modificator pentru a face o singură înlocuire pe linie.
Vezi si Ce caractere trebuie să evadez când folosesc sed într-un script sh?