Papoy Edits - 19 days ago 11

Bash Question

I have received an assignment that i'm struggling with where, somewhat simplified, i need to extract 6 arbitrary digits from a dataset that cannot start with 3 binary digits. I am only allowed to use grep-commands. For example, from this dataset:

`578696344678`

100307548

105768

i want to extract these pieces:

`578696`

344678

307548

105768

So it is allowed for multiple matches on the same row, and it can start on less than 3 binary digits, but not exactly 3 binary digits. I've fiddled a bit with various regex concepts but so far i only have this base code, because my inexperienced mind can't see any possible approach to separate the binary digits:

`grep -o '[0-9]\{6\}'`

Answer Source

Make it in two steps

```
grep -Po -e '([01]{3})*(\d{6})' | grep -Po '(\d{6})$'
```

First getting the matching digits with/without leading 'binary digits'. Second, the 6 digits at the end.

The same thing without extended RegEx

```
grep -Eo '([01]{3})?([0-9]{6})' | grep -Eo '([0-9]{6})$'
grep -o '\([01][01][01]\)*\([0-9][0-9][0-9][0-9][0-9][0-9]\)' | grep -o '\([0-9][0-9][0-9][0-9][0-9][0-9]\)$'
```