2014-09-02 18 views
6

Próbuję wstawić tekst do trzeciej linii w pliku przy użyciu sed i składnia znalazłem na innych forach jest:sed wkładka wiersza poleceń OSX

sed -i '' "3i\ text to insert" file 

Gdy używam to jednak Wystąpił błąd:

sed: 1: "3i\ text to insert": extra characters after \ at the end of i command 

Nie mogę się domyślić, co jest przyczyną problemu. Używam OSX, dlatego mam puste "" jako moje rozszerzenie.

Dzięki!

Odpowiedz

19

Należy umieścić znaku nowej linii bezpośrednio po \:

sed '3i\ 
text to insert' file 

Jest to właściwie zachowanie określone przez POSIX specification. Fakt, że GNU sed pozwala określić tekst do wstawienia w tej samej linii, jest rozszerzeniem.

+3

Chciałbym dać dodatkowe +1 do wskazując, że „tekst dodaje się po' 3i' bit”jest Rozszerzenie GNU (ale mogę tylko dać jeden z nich). –

+0

@ JonathanLeffler Przyznam mu inne +1 w Twoim imieniu :-) –

6

Na OSX można użyć:

sed -i.bak '3i\ 
text to insert 
' file 
1

Oto jak to zrobić w jednym składni wiersza

sed -i '' -e "2s/^//p; 2s/^.*/text to insert/" file 
  • duplikat Druga linia: 2s/^//p;

  • zastąpić nową linię z tekstem: 2s/^.*/text to insert/

0

to działa dla mnie

sed -i '' '3i\ 
text to insert' file 
0

Jeśli chcesz zmodyfikować plik określonego typu pliku (.sh w moim przypadku), użyj tego polecenia.

sed -i '.sh' '3i\ 
mymodified text to insert' temp.sh 

Upewnij się, że podział wiersza po ukośnik („\”)