Piszę skrypty powłoki dla mojego serwera, który jest hostem współdzielonym z systemem FreeBSD. Chcę też móc przetestować je lokalnie na komputerze z systemem Linux. Dlatego staram się pisać je w przenośny sposób, ale sed
nie widzę sposobu, aby to zrobić.
Część mojej strony używa generowanych statycznych plików HTML, a ta linia sed wstawia poprawny DOCTYPE po każdej regeneracji:
sed -i '1s/^/<!DOCTYPE html> \n/' ${file_name.html}
Działa z GNU sed
w systemie Linux, ale FreeBSD sed
oczekuje, że pierwszym argumentem po -i
opcji będzie rozszerzenie kopii zapasowej. Tak to wyglądałoby:
sed -i '' '1s/^/<!DOCTYPE html> \n/' ${file_name.html}
Jednak GNU sed
z kolei oczekuje, że wyrażenie pojawi się natychmiast po nim -i
. (Wymaga to również poprawek z obsługą nowego wiersza, ale na to już tutaj odpowiedziano )
Oczywiście mogę dołączyć tę zmianę do mojej kopii skryptu na serwerze, ale to by popsuło, tj. Moje użycie VCS do wersji. Czy istnieje sposób, aby to osiągnąć za pomocą sed w pełni przenośny sposób?
-i