Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

INPUT:   vgxyxgf.de.foo.net  asdf    34efg   sdtds.de.foo.net    xyyxv   e5432   asdfycfb.us.foo.net dfvasf  34525

OUTPUT:   vgxyxgf   sdtds   asdfycfb

How can I make the OUTPUT? Like "awk '{SOMEMAGIC}' foo.txt

So I have the "INPUT" and I need a /etc/hosts file style OUTPUT... :\

share|improve this question
Can you clarify your question? – gabe. Jan 27 '12 at 1:01
up vote 5 down vote accepted

With awk

awk '{sub(/\..*/,"",$2);$0=$1 "  "$2}1' foo.txt

With sed

sed 's/^\(\([^.]*\.\)\{4\}\).*$/\1/;s/\.$//' foo.txt
share|improve this answer
I don't know how it works... but it work!! wow.. – LanceBaynes Jan 26 '12 at 4:28
@LanceBaynes Magic of course! What I did was replace everything after the first dot in the 2nd field $2 with a null string. I then told awk that the current line $0 is only made up of the first field $1 followed by two spaces followed by the (altered) second field $2 – SiegeX Jan 26 '12 at 4:36

Just for fun, here's a non-awk, non-sed answer:

cut -f1-4 -d. foo.txt
share|improve this answer

Another awk solution, analogous to Steven's cut answer:

awk -F. -v OFS=. '{print $1, $2, $3, $4}' filename

Uses dots as the field separator, and prints the first 4 fields dot-separated.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.