Eu usaria essa variante usando awk (e sed para substituir o ORS à direita por newline), que verifica strings de comprimento de 17 caracteres ou mais.
awk -vRS='[|\n]' -vORS='|' 'length($0)>=17{$0="-"}1' | sed 's/|$/\n/'
Para filtrar apenas números com mais de 17 dígitos, faça:
awk -vRS='[|\n]' -vORS='|' 'log($0)/log(2)>=17{$0="-"}1' | sed 's/|$/\n/'
Também existem truques para evitar o sed e usar um único processo do awk, como aqui: link
Dessa forma, usamos os recursos de divisão e filtragem de registros do awk, e podemos ter um controle mais preciso do filtro, em oposição a uma expressão regular.
Teste de validação:
$ awk -vRS='[|\n]' -vORS='|' 'length($0)>=17{$0="-"}1' <<< '+1234|2|12|1|1|1537820114232192380|0 +1234|2|12|1|1|1537820113262689150|0' | sed 's/|$/\n/'
+1234|2|12|1|1|-|0 +1234|2|12|1|1|-|0
$ awk -vRS='[|\n]' -vORS='|' 'log($0)/log(2)>=17{$0="-"}1' <<< '+1234|2|12|1|1|1537820114232192380|0 +1234|2|12|1|1|1537820113262689150|0' | sed 's/|$/\n/'
+1234|2|12|1|1|-|0 +1234|2|12|1|1|-|0