2013-08-26 10 views
25

Mam linię ze spacjami na początku, na przykład "Witaj świecie". Chcę wstawić ten wiersz do określonej linii w pliku. np wstawić "Hello World" do następnego plikused wstawia linię ze spacjami do konkretnej linii

hello 
world 

wynik:

hello 
    hello world 
world 

Używam tego sed skryptu:

sed -i "${line} i ${text}" $file 

Problem polega na tym, że jestem coraz moja nowa linia bez spacji:

hello 
hello world 
world 

Odpowiedz

39

można uciec znak space, na przykład, aby dodać 2 miejsca:

sed -i "${line} i \ \ ${text}" $file 

Albo można to zrobić w definicji zmiennej text:

text="\ \ hello world" 
+7

można tylko uciec pierwszego miejsca. Sed zdaje się automatycznie rozpoznawać pozostałe przestrzenie. Np .: 'a \ text' dołącza tekst z 4 spacjami z przodu. – haridsv

+0

Dzięki! Takie eleganckie rozwiązanie! – ShahNewazKhan

4
$ a=" some string " 
$ echo -e "hello\nworld" 
hello 
world 
$ echo -e "hello\nworld" | sed "/world/ s/.*/${a}.\n&/" 
hello 
    some string . 
world 

. było dodana w powyższym podstawieniu, aby wykazać, że zachowane są krótkie spady. Zamiast tego użyj sed "/world/ s/.*/${a}\n&/".

5

Trzeba tylko jeden \ do Input Multiple wykroje jak ten

sed -i "${line} i \ ${text}" $file 
Powiązane problemy