Aşağıdaki içeriğe sahip bir dosyam var:
<username><![CDATA[name]]></username>
<password><![CDATA[password]]></password>
<dbname><![CDATA[name]]></dbname>
ve ilk satırdaki "isim" i "şey" e, ikinci satırdaki "parola" "şey" ye, ve üçüncü satırdaki "isim" ye "farklı" a değiştirecek bir komut dosyası yapmam gerekiyor. Bu dosyada meydana gelenlerin sırasına güvenemiyorum, bu yüzden "isim" in ilk oluşumunu "bir şey" ile ve "isim" in ikinci oluşumunu "bir şey" ile değiştiremiyorum. Aslında doğru şeyi bulup değiştirdiğimden emin olmak için etraftaki dizeleri aramam gerekiyor.
Şimdiye kadar bu komutu ilk "isim" oluşumunu bulup değiştirmek için denedim:
sed -i "s/<username><![CDATA[name]]><\/username>/something/g" file.xml
ancak işe yaramadığından, bu karakterlerden bazılarının kaçmaya ihtiyaç duyabileceğini düşünüyorum.
İdeal olarak, iki "kullanıcı adı" olayını eşleştirmek ve yalnızca "adı" yerine koymak için regex'i kullanabilmeyi çok isterim. Böyle bir şey ama ile sed
:
<username>.+?(name).+?</username>
ve parantez içindeki içerikleri "bir şey" ile değiştirin.
Mümkün mü?