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
@ 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
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:
Jeśli możesz, o wiele łatwiej jest użyć perla, aby to zrobić:
search
może zawierać\n
s, aby reprezentować znaki nowej liniiźródło
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, is/search/replace/
jest to wyrażenie