Encuentre y reemplace con sed usando comodín tanto para encontrar como para replace

Así que entiendo cómo usar sed , es decir, al search usando comodines,. .* . El problema que estoy enfrentando es cómo encontrar y replace utilizando el comodín ambas veces, tanto en la búsqueda como en la sustitución de las partes del command. Un ejemplo ayudará a ilustrar mejor esto:

 $cat test.txt a(bc) a(l) a(d) a(loke) a(babab) a(h323) $ 

Quiero añadir una cadena, _mynewstring , a lo que venga después de a([string of some length] . Tenga en count que no puedo simplemente search y replace el paréntesis de cierre porque hay otros paréntesis de cierre en cada línea (que dejo para facilitar el ejemplo), pero ninguno cuyo paréntesis de apertura emparejado tiene una a en frente de él. La salida debería verse así:

 $cat test.txt a(bc_mynewstring) a(l_mynewstring) a(d_mynewstring) a(loke_mynewstring) a(babab_mynewstring) a(h323_mynewstring) $ 

He probado lo siguiente,

 sed -i 's/a(.*)/a(.*_mynewstring)/g' test.txt 

pero esto solo produce,

 cat test.txt a(.*_mynewstring) a(.*_mynewstring) a(.*_mynewstring) a(.*_mynewstring) a(.*_mynewstring) a(.*_mynewstring) 

Claramente, el comodín está siendo tomado como una cadena literal, que no es lo que necesito, pero después de exhaustivo Google no estoy seguro de cómo lo haría de otra manera. He intentado soluciones usando awk , grep y combinaciones de las tres sin ningún resultado. Gracias por cualquier ayuda que usted nos pueda proporcionar.

Escapa del ( y busca no ) . Use \1 para mantener la agrupación coincidente.

 sed 's/a\(([^)]*\))/a\1_mynewstring)/g' file1 

Da:

 a(bc_mynewstring) a(l_mynewstring) a(d_mynewstring) a(loke_mynewstring) a(babab_mynewstring) a(h323_mynewstring)