Question: How to extract a text part by regexp in linux shell? Lets say, I have a file where in every line is an IP address, but on a different position. What is the simplest way to extract those IP addresses using common unix command-line tools?

Answer: 
The *awk* example above didn't work for me, and I needed to do it with *awk* specifically, so I came up with this method:

```
$ awk '{match($0,/[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+\.[0-9]{1,3}+/); ip = substr($0,RSTART,RLENGTH); print ip}' your_sample_file.log

```

You can also just use pipes if you're getting the data from somewhere else. Eg, *ipconfig*

I also realized the method matches invalid IP addresses.

Here is an extended version that only matches valid IPv4 Addresses:

```
$ awk 'match($0, /(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)/) {print substr($0, RSTART, RLENGTH)}' sample_file.log

```

Hope it helps someone else.
If you are not given a specific file and you need to extract IP address then we need to do it recursively.
grep command -> Searches a text or file for matching a given string and displays the matched string .

```
grep -roE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

```

`-r` We can search the entire directory tree i.e. the current directory and all levels of sub-directories. It denotes recursive searching.

`-o` Print only the matching string

`-E` Use extended regular expression

If we would not have used the second grep command after the pipe we would have got the IP address along with the path where it is present