En regex101: https://regex101.com/r/FM88LA/1
En la consola de mi navegador:
x='"AbCd123|999"'; "\"AbCd123|999\"" x.match(/[^\""|]+/) Array [ "AbCd123" ]Usando sed en el shell:
(base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/([^\"|]+)/\1/p' "AbCd123|99999" (base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/\"([^|]+)/\1/p' AbCd123|99999"Eso está bien, porque el comando sed usado con la opción -n y el indicador p solo imprime el texto que no coincidió + el resultado del reemplazo exitoso.
Eso significa que puede obtener su "coincidencia" con
echo '"AbCd123|99999"' | sed -En 's/["|]*([^"|]+).*/\1/p'Vea la demostración en línea .
Aquí, el patrón llega al primer carácter que no es " y | con ["|]* , luego la parte ([^"|]+) captura uno o más caracteres que no sean " y | y luego .* coincide con el resto de la cadena.
Todo lo que coincidió pero no se capturó se elimina, ya que solo solicita p el \1 , el valor del Grupo 1 (capturado con ([^"|]+) ).