Question: I have a list like this:

```
5678:robert dylan   :d.g.m. :marketing  :04/19/43 85000

```

I want to show only the name and designation of the person. I want to use `sed` for that. How should I do that?

Answer: 
**Update**:

```
echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | 
sed 's/:/\n/g' | sed '1d;3d;$d'| sed 'N;s/\n/ - /'

```

yields

```
robert dylan - marketing

```

*Explanation:*

Works by splitting the line into several lines based on `:`, deleting the first, third and last lines, and then joining them up again. 

**NOTE**: In the last expression, *you can specify what separates the name from the designation* by putting something else between the final set of `/ /` in `'N;s/\n/ /'`

---

*Previous AWK solution*:

Not `sed`, but `awk` is quite a natural tool for this if it is acceptable:

```
$ echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" | awk -F":" '{print $2, $4}'

```

yields

```
robert dylan  marketing

```

Alternatively, if your data was stored in a file named `data.txt`:

```
awk -F":" '{print $2, $4}' data.txt

```

would produce the same output.

[awk](http://www.grymoire.com/Unix/Awk.html) is really well suited for these sort of tasks.

*Explanation*:

```
awk -F":" '{print $2, $4}'

```

`-F` sets the field separator to `:`, `print $2, $4` print resulting fields 2 and 4 respectively. You can use `printf` to format the output as specific as you need.
This might work for you:

```
echo "5678:robert dylan :d.g.m. :marketing :04/19/43 85000" |
sed 's/[^:]*:\([^:]*:\)[^:]*:\([^:]*\):.*/\1\2/'
robert dylan :marketing

```

Explanation:

The left hand side (LHS) of the substitute command says:

* `[^:]*:` match zero or more non `:`'s followed by a `:` - this matches `5678:`
* `\([^:]*:\)` as above but will be remembered as a back reference `\1` - matches `robert dylan :`
* `[^:]*:` as above but no back reference - matches `d.g.m. :`
* `\([^:]*\)` as above (excepting the `:` but will be remembered as a back reference `\2` - matches `marketing`
* `:.*` a `:` followed by everything else - matches `:04/19/43 85000`

The right hand side of the substitute command says:

* `\1\2` replace the left hand side by the first and second back references.