Parece que awk seria a melhor opção para suas necessidades, pois esses problemas não existem devido ao fato de poder usar campos e registros:
x=$(awk '/some-pattern/ { sub(/\r$/, "") ; printf("%s", $NF) ; exit }' some-file)
A substituição evita seu problema com finais de linha CRLF.
sub(/\r$/, "") remove o CR final, se existir. Como awk trata \n como o separador de registro (linha), não é necessário separá-lo, pois ele não está nos dados que estão sendo observados.
printf("%s", $NF) imprime o campo final ( $NF ) sem nova linha à direita ( print e algumas outras funções awk acrescentam uma nova linha por padrão).
exit acontece após as duas primeiras ações - isso equivale a m1 na linha de comando grep . Isso garante que awk saia após a execução dos dois comandos anteriores - e como esses comandos são emitidos em uma correspondência, e awk avalia os dados de uma maneira FIFO, isso somente imprimirá a primeira correspondência.