in reply to Re^2: Delete a string possibly over two lines
in thread Delete a string possibly over two lines

No, it does not leave { } in the output. Did you mis-copy it?

Looks like you are changing the spec. Please give exact definition of "other strings with similar patterns".

  • Comment on Re^3: Delete a string possibly over two lines

Replies are listed 'Best First'.
Re^4: Delete a string possibly over two lines
by texuser (Novice) on Feb 06, 2018 at 05:22 UTC

    I'm new to perl so I may have made a mistake. Here are two examples of the strings I want to delete

    { Programa 1.2.3 64-bit 2dat: }

    { Programb 10.1.2.3 64-bit 1dat: }

    Also sometimes there are no spaces between the braces like {Programa 1.2.3 64-bit 2dat:}, { Programa 1.2.3 64-bit 2dat:} and {Programa 1.2.3 64-bit 2dat: }. Does this make a difference to the code?

    It would be good to get rid of both strings in one script. I'm using Perl version 5.24.1.

    Update: After doing some reading, I have now tried s/.*\K\{\s*Name.*\}//s; and that seems to work with spaces/no spaces with the {}. I still don't know how to use one script to remove two or more strings like { Programa 1.2.3 64-bit 2dat: } and { Programb 10.1.2.3 64-bit 1dat: }.

    Thanks.

      #!/usr/bin/perl # http://perlmonks.org/?node_id=1208527 use strict; use warnings; local $/ = '}'; # use } as line terminator... while(<DATA>) { s/.*\K\{\s*(?:Name|Program).*\}//s; print; } __DATA__ { Name 1.2.3 xxxx xxxxx} where xxxx and xxxxx could be a-z, 0-9 or : (a single colon). There could be one or more spaces after { and before the } and there c +ould be one or more spaces between the groups in the string. Also the + string could be split over two lines like { Name 1.2.3 xxxx xxxxx } { Name 1.2. 3 xxxx xxxxx} { Programa 1.2. 3 xxxx xxxxx} { Programb 1.2. 3 xxxx xxxxx} { Name 1.2.3 xxxx xxxxx }. So it could be split at a space or after a dot. There could be one or +more spaces at the end of the split line before the newline like this { Name 1.2.3\ \ \ \ xxxx } where I use \ to denote a space. My question is how do I get rid of all these strings in a file. I'm us +ing Perl under Windows 10 if that helps. Thanks.

        Thanks that worked. If I may ask one final question. How do I run the script on an input file say infile and output to a file outfile (these file names could change from run to run) without appending the infile to the code you provided? Alternatively can I make the changes using a suitable command line that does what the script does instead of using the script?

        Thanks.