Para responder à pergunta específica que você fez, inicie sua expressão de pesquisa com um padrão que ignorará um campo:
module="$2"
/bin/grep "^[^|]*| *${module}\>" test.properties
Para quebrar isso:
^ Start of line
[^|]* 0 or more non-separator characters
| A field separator
* 0 or more spaces
${module} Switch from single- to double-quotes to interpolate variable name
\> End of a word ("\>" becomes '\>' when shell parses it)
Mas é melhor usar algo como awk
ou perl
:
awk -F' *\| *' -v module="$module" '$2 == module' test.properties
A longo prazo, pode ser melhor usar um formato conhecido como CSV e ferramentas para trabalhar com ele.