1

I'm trying to delete lines between two pattern (Beginn: info / End: } ), where match a string.

Here my file:

# bla bla
# bla bla
# bla bla
# bla bla

nnssjnds nkjdnds "nsrnsnmks" ffsns {
  is on or off at 9:12:43 23/02/2015;
  is nass or trocken at 08:32:12 22/02/2015;
}

info text01text {
  beginn 30/04/2015 10:00:04;
  end    30/04/2015 19:00:04;
  check1 30/04/2015 11:30:04;
  check2 30/04/2015 13:00:04;
  check3 30/04/2015 16:00:04;
  Check4 30/04/2015 18:00:04;
  build top end;
  mix water 0102030456789;
  xim "43ndf392rfhf<DF>3}";
  test space = "ALLFINE";
  eman cpre "ann";
}
info text02text {
  beginn 30/04/2015 10:00:04;
  end    30/04/2015 19:00:04;
  check1 30/04/2015 11:30:04;
  check2 30/04/2015 13:00:04;
  check3 30/04/2015 16:00:04;
  Check4 30/04/2015 18:00:04;
  build top end;
  mix water 0202030456789;
  xim "43ndf392rfhf<DF>3";
  test space2 = "ALLFINE2";
  eman cpre2 "ann2";
}
info text03text {
  beginn 30/04/2015 10:00:04;
  end    30/04/2015 19:00:04;
  check1 30/04/2015 11:30:04;
  check2 30/04/2015 13:00:04;
  check3 30/04/2015 16:00:04;
  Check4 30/04/2015 18:00:04;
  build top end;
  mix water 0302030456789;
  xim "43ndf392rfhf<DF>3";
  test space3 = "ALLFINE3";
  eman cpre3 "ann3";
}

my sed script

:point
/^info/,/^}/ {
   /}/!{
      $!{
         N;
         bpoint
      }
   }
   /0202030456789/d;
}

My sed script worked correct with the string 0202030456789 and delete all lines from info text02text { to }. Try it with the string 0102030456789 from text01text, then delete sed to } from line " xim "43ndf392rfhf3}";" and the lines

test space = "ALLFINE";
eman cpre "ann";
}

don't delete.

How is it possible to delete all lines, where found the string?

Thanks!

1
  • replace /}/!{ by /^ *}/!{ Commented May 1, 2015 at 13:18

1 Answer 1

3

From your sample

try this:

:point
/^info/,/^}/ {
   /\n *}/!{
      $!{
         N;
         bpoint
      }
   }
   /0202030456789/d;
}

But I prefer:

/^info .*{/ {
  :a;
    N;
    /\n *}/!ba;
    /0202030456789/d;
}

This could by written (under ):

mixToDel=0302030456789
sed < file '/^info .*{/{ :a;N;/\n *}/!ba;/'$mixToDel'/d;}'

Or maybe:

sed < file '/^info .*{/{ :a;N;$!{/\n *}/!ba};/'$mixToDel'/d;}'

to prevent missing } at end of file:

/^info .*{/{
  :a;
    N;
    $!{
        /\n *}/!ba
    };
    /'$mixToDel'/d;
}
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.