Próbuję użyć sed lub awk, aby zastąpić 5 wierszy w pliku smb, ale po prostu nie mam pojęcia, jak sobie radzić z nowymi wierszami.
Próbuję użyć sed lub awk, aby zastąpić 5 wierszy w pliku smb, ale po prostu nie mam pojęcia, jak sobie radzić z nowymi wierszami.
Odpowiedzi:
Sed jest w tym dość zły, ponieważ obsługuje jedną linię na raz. Jedyną przyzwoitą techniką, jaką kiedykolwiek widziałem, aby to zrobić, jest ta , która polega na przechowywaniu całego pliku w buforze wstrzymania sed, a następnie operowaniu nim na raz:
sed -n '1h;1!H;${g;s/search/replace/;p;}'
Jeśli możesz, o wiele łatwiej jest użyć perla, aby to zrobić:
perl -0pe 's/search/replace/'
searchmoże zawierać \ns, aby reprezentować znaki nowej linii
sedmultiliner.
-0ustawia separator rekordów na null, więc cały plik będzie odczytywany jednocześnie zamiast wiersza po wierszu. -ppowoduje wydruk wyniku po zamianie. -eczy trzeba użyć następnego argumentu jako wyrażenia, i s/search/replace/jest to wyrażenie