multiline grep search into separate files per occurence
-1
votes
5
answers
77
views
I have a file as following:
***example.txt***
-1
15
1 0 0 11 -1.0000E+001 1.0000E+001 -1.0000E+001
2 0 0 11 1.0000E+001 1.0000E+001 -1.0000E+001
...
29 0 0 11 1.0000E+001 2.0000E+001 1.0000E+001
30 0 0 11 5.0000E+000 5.0000E+000 5.0000E+000
-1
#ffafsda
-1
780
1 116 1 2 1 1 7 20
1 11 2 15 4 18 3 12
13 16 22 19 5 24 9 29
8 27 6 23
-1
asfasd
afsdasdf
It consists of blocks always starting and ending by line entirely matching ^ {4}-1$
.
I need to separate a file into multiple by these blocks.
What I figured out right now is this multiline regex that extracts these blocks:
grep -Pzo '(?s)((?m:^)\s{4}-1(?m:$).*?(?m:^)\s{4}-1(?m:$))' example.txt
output:
-1
15
1 0 0 11 -1.0000E+001 1.0000E+001 -1.0000E+001
2 0 0 11 1.0000E+001 1.0000E+001 -1.0000E+001
...
29 0 0 11 1.0000E+001 2.0000E+001 1.0000E+001
30 0 0 11 5.0000E+000 5.0000E+000 5.0000E+000
-1 -1
780
1 116 1 2 1 1 7 20
1 11 2 15 4 18 3 12
13 16 22 19 5 24 9 29
8 27 6 23
-1
You see second match is exactly printed behind first match (no newline or separator) - I'm failing to separate these occurences into files
required output is following:
***file1:***
-1
15
1 0 0 11 -1.0000E+001 1.0000E+001 -1.0000E+001
2 0 0 11 1.0000E+001 1.0000E+001 -1.0000E+001
...
29 0 0 11 1.0000E+001 2.0000E+001 1.0000E+001
30 0 0 11 5.0000E+000 5.0000E+000 5.0000E+000
-1
***file2***
-1
780
1 116 1 2 1 1 7 20
1 11 2 15 4 18 3 12
13 16 22 19 5 24 9 29
8 27 6 23
-1
Any help appreciated.
Asked by Honza S.
(101 rep)
Mar 20, 2024, 12:47 PM
Last activity: Mar 21, 2024, 11:17 PM
Last activity: Mar 21, 2024, 11:17 PM