Enable grep to exactly match the regular expression
Use awk.

This command will "extract" a bulk list of words assuming it's in the format you specified above:

awk '/\*\*/,/\*\*/ {print substr($0, 3, length($0)-4)}' &lt;filename&gt;




Example:

For this example, assume we have a text file called words.txt with the following content:

**test**
1. Definition:
2. Usage
3. Others

**foo**
1. Definition:
2. Usage
3. Others

**bar**
1. Definition:
2. Usage
3. Others


$ awk '/\*\*/,/\*\*/ {print substr($0, 3, length($0)-4)}' words.txt

test
foo
bar


What it's Doing


/\*\*/,/\*\*/ This is the pattern range.  I could have done this by looking for the first set of asterisks (/\*\*) and been done, but I used a full range for completeness.  One method is no more "right" than the other.
{print substr($0, 3, length($0)-4)}' This prints the subsring (of the string **word**) starting at the 3rd character, with a length of the whole string (length($0)) minus four characters (the four asterisks).
&lt;filename&gt; This is the input file to process the awk command