Zamiana wielu linii w sed lub awk [zamknięte]


9

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.


6
Oczywiście sed i awk mogą to zrobić, ale mam mały problem ze zrozumieniem, jakie jest twoje pytanie. Co dokładnie powoduje problemy? Wstawiać nowe linie? Zastępujesz je?
frabjous

Odpowiedzi:


19

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


1
+1 za sedmultiliner.
Lazer,

Czy potrafisz wyjaśnić, co robi wiersz poleceń?
Michael

1
@ Michael -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
Michael Mrozek
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.