Zważywszy, że sed
wydaje się myśleć, że prowadzisz delete line
polecenie (d
), może chcesz na wyjściu polecenie, aby zobaczyć, co faktycznie jest w, że zmienna środowiskowa twoja:
for fl in $(S_convertPath ${RESOURCE_DIR}/db)/db.changelog-*xml; do
echo sed -i "s/HOSTNAME/${PSM_SERVER_ADDRESS}/g" $fl
done
Istnieje duża szansa, że PSM_SERVER_ADDRESS
uszkodzi twoje polecenie sed
(i może wymagać przetworzenia, aby go wyczyścić). Jednym ze sposobów, aby to zrobić (pod warunkiem, że masz dość niedawno sed
) byłoby użyć ograniczników, które nie pojawiają się w zmiennej środowiskowej, na przykład:
sed -i "s?HOSTNAME?${PSM_SERVER_ADDRESS}?g" $fl
Ponieważ pan przyjął tę odpowiedź, ja może również dodać rozdzielczość dla dodatkowego problemu, który znalazłeś. Wygląda na to, że BSD sed
, w przeciwieństwie do Linuksa, ma wymaganie , że podajesz rozszerzenie do opcji -i
. Tak więc, podczas gdy Linux pozwala na:
sed -i "sed-command"
edytować w miejscu, wariant BSD musi mieć:
sed -i "" "sed-command"
z pustym zapasowej przyrostka.
Bez tego, sed
może użyć twojego polecenia jako rozszerzenia i twojej pierwszej nazwy pliku jako polecenia.
To jest. Wartość 'PSM_SERVER_ADDRESS' jest ścieżką (która zawiera'/'characters), więc polecenie s interpretuje te znaki'/'jako ograniczniki (np.' S/HOSTNAME // Users/davidkavanagh/path/g'. Wygląda jak nazwa alternatywna należy używać ograniczników. Być może 's @ HOSTNAME @ $ {PSM_SERVER_ADDRESS}/g'. – jamessan
ADRES IP jest równy funkcji, która pobiera adres IP przy użyciu nazwy hosta -i, aby można ją było używać na wszystkich platformach – daverocks
@daverocks, musisz wykonać skrypt Zapewniłem, że linia się powtórzy, nawet po dokonanych zmianach.To jedyny sposób, aby dowiedzieć się, jakie są polecenia dla "sed". – paxdiablo