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/'
search
może zawierać \n
s, aby reprezentować znaki nowej linii
sed
multiliner.
-0
ustawia separator rekordów na null, więc cały plik będzie odczytywany jednocześnie zamiast wiersza po wierszu. -p
powoduje wydruk wyniku po zamianie. -e
czy trzeba użyć następnego argumentu jako wyrażenia, i s/search/replace/
jest to wyrażenie