18

I have a link and I would like to return only content between www. and .com

e.g www.blablabla.com would return only blablabla

How could I do that? When I use grep '\.[a-zA-Z0-9\.-]*\.' it gives me .blablabla.

4
  • 4
    awk -F. '{print $2}' Commented May 2, 2016 at 18:07
  • Yes it would work but i forgot to mention that i do not want to use cut or awk to cut it with delimiter . Commented May 2, 2016 at 18:11
  • 6
    "i do not want to use cut or awk to cut it with delimiter ." Apparently, you don't want grep -P either. To get the best answer, you should explain your requirements. There are many good solutions to this problem. You should explain why you are rejecting the best ones. Commented May 2, 2016 at 18:44
  • 3
    Homework problem? Commented May 5, 2016 at 20:36

2 Answers 2

22
$ echo "www.blablabla.com" | grep -oP '(?<=\.)[a-zA-Z0-9\.-]*(?=\.)' blablabla 

-o -- print only matched parts of matching line

-P -- Use Perl regex

(?<=\.) -- after a literal ., aka, a "positive look-behind" ...

[a-zA-Z0-9\.-]* -- match zero or more instances of lower & upper case characters, numbers 0-9, literal . and hyphen ...

(?=\.) -- followed by a literal ., aka a "positive look-ahead"

See this link for more on look arounds. Tools like https://regex101.com/ can help you break down your regular expressions.

3
  • Thanks that's what i wanted but what does it do ? Could u explain it a bit more please? Also -P uses Perl regular expression is there any way to do it just with grep regular expressions? Commented May 2, 2016 at 18:13
  • Not that I know of Commented May 2, 2016 at 18:39
  • 2
    If you don't want to use -P there is no way you can do this using grep re alone. If you want to stick with grep consider using tr to drop the . like this echo 'www.blablabla.com' | grep -o '\.[a-zA-Z0-9\.-]*\.' | tr -d . Commented May 3, 2016 at 1:34
2

sed solution:

$ str='Hellowww.hello.comMywww.world.comWorld' $ echo "$str" | sed -e 's/com/com\n/g' | sed -ne '/.*www\.\(.*\)\.com.*/{ s//\1/p }' hello world 

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.