Mam plik o następującej treści:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
i muszę stworzyć skrypt, który zmieni „imię” w pierwszym wierszu na „coś”, „hasło” w drugim wierszu na „coś”, a „imię” w trzecim wierszu na „coś innego”. Nie mogę polegać na kolejności występowania w pliku, więc nie mogę po prostu zastąpić pierwszego wystąpienia „nazwy” słowem „coś”, a drugiego wystąpienia „nazwy” słowem „coś innego”. Właściwie muszę wyszukać otaczające ciągi, aby upewnić się, że znajduję i zastępuję poprawną rzecz.
Do tej pory próbowałem tego polecenia, aby znaleźć i zastąpić pierwsze wystąpienie „name”:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
jednak to nie działa, więc myślę, że niektóre z tych postaci mogą wymagać ucieczki itp.
Idealnie, chciałbym móc użyć wyrażenia regularnego, aby po prostu dopasować dwa wystąpienia „nazwy użytkownika” i zastąpić tylko „imię”. Coś takiego, ale z sed
:
<username>.+?(name).+?</username>
i zamień zawartość w nawiasach na „coś”.
czy to możliwe?