Wpis z mikrobloga

Problem natury #informatyka #programowanie #linux:

Mam kilkanaście komputerów, z którymi muszę się połączyć po SSH i zmodyfikować im konkretny skrypt. Muszę znaleźć w pliku konkretną linię i wstawić po niej dodatkowe polecenie. Nie mogę po prostu wgrać nowego pliku. Czy da się (i jak) to zrobić przy pomocy SEDa? Skończyła mi się inwencja ( ͡° ʖ̯ ͡°)

Aktualny skrypt:

echo „01” > /coś/coś/coś/cośinnego
echo „02” > /coś/coś/coś/cośinnego
echo „03” > /coś/coś/coś/cośinnego

Co chcę zrobić:

echo „01” > /coś/coś/coś/cośinnego
echo „02” > /coś/coś/coś/cośinnego
echo „77” > /coś/coś/coś/cośinnego2
echo „03” > /coś/coś/coś/cośinnego
  • 12
@ponton: dysponuję wyłącznie SSH
@size: odpada, pliki niekoniecznie są do siebie podobne. Muszę znaleźć sposób na dopisanie jednego polecenia po konkretnym stringu. Myślałem o odpaleniu na każdej maszynie skryptu w postaci:

searchreplace() {
local search="echo „02” > /coś/coś/coś/cośinnego"
local replace="echo „02” > /coś/coś/coś/cośinnego\necho „77” > /coś/coś/coś/cośinnego2"

sed -i "s/${search}/${replace}/g" konfiguruj.sh
}

gdzie \n miałoby mi złamać linię... ale wypierdziela mi się to przez 'echo' :P

edit:
@fnord23: o, tego
Twój problem wynika z tego, że używasz "/" zarówno jako separatora w SED, jak i w skrypcie. Użyj innego separatora sed np. '@':

zakładam, że w konfiguruj.sh masz:

echo "01" /cos/cos/cos
echo "02" /cos/cos/cos

i między 01 i 02 chcesz wstawić linijkę 01.5:

search="echo \"01\" > /cos/cos/cos"
replace="${search}\necho \"01.5\" > /cos/cos/cos/jeszcze"
cat konfiguruj.sh | sed "s@${search}@${replace}@g"