Sed заменяет содержимое от x до y на нескольких строках - PullRequest
0 голосов
/ 19 апреля 2020

У меня есть следующий файл:

2020-04-17 10:35:08.339       msw_im.c   wync_ua[0]DEBUG:  .mark1: lorem ipsum
dolor sit amet, consetetur sadipscing elitr, sed diam 
nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. 
At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren

2020-04-17 10:35:08.340

Я хочу заменить каждый символ между "mark1:" и "2020-04-17 10: 35: 08.340" следующим образом

2020-04-17 10:35:08.339       msw_im.c   wync_ua[0]DEBUG:  .mark1: xxxxxxxxxxx
xxxxxxxxxxxxxxxxxxx
xxxxx
xxxxxxxx
xxxxxxx

2020-04-17 10:35:08.340

Как я могу это сделать? Я попытался:

$: sed -i '/mark1/,/^$/{s/./x/g}' file

, который работает, но также заменяет начало 1-й строки на «х». Я попробовал несколько других вещей без успеха. Есть идеи?

1 Ответ

0 голосов
/ 19 апреля 2020

С GNU sed:

sed -E -i '/mark1:/,/^$/{ /mark1:/{ :a;s/(mark1:x*)[^x]/\1x/;ta;b }; s/./x/g }' file

Вывод в файл:

2020-04-17 10:35:08.339       msw_im.c   wync_ua[0]DEBUG:  .mark1:xxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2020-04-17 10:35:08.340

См .: man sed и FAQ по регулярным выражениям переполнения стека

...