Zamiast keypress proponuję input - to specjalne zdarzenie służące obsługiwaniu zmiany zawartości pól formularza. Warto także zauważyć, że definiowanie obsługi zdarzeń w kodzie HTML jest uważane za złą praktykę i tego typu rzezcy należy przenieść do JS przy pomocy elem.addEventListener: https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener
Natomiast co do już samej Twojej funkcji: w txt nie masz zawartości pola, ale samo pole. Do zawartośći trzeba się dobrać (txt.value). No i musisz pamiętać, że stringi w JS są niemutowalne. Co to oznacza? Że nie da się zmienić ich wartości - da się je jedynie nadpisać, zatem samo txt.value.replace nic nie zmieni (stworzy to nowy string, którego do niczego nie przypisujesz).
Zastanawiam się także nad wyrażeniem regularnym: jeśli chcesz się pozbywać nowych linii, to nie wiem po co Ci w tym regexie $. To złapie tylko nową linię na samym końcu. Jeśli chcesz łapać wszystkie, to w gruncie rzeczy nawet nie musisz używać regexa, tylko po prostu \n. Natomiast jeśli ma być usuwany tylko dodawany na końcu znak nowej linii, to tak - wówczas taki regex się przyda.
Ostatecznie kod wyglądałby mniej więcej tak: http://jsfiddle.net/Comandeer/xok2pwj9/
BTW nie baw się window.event, bo w Firefox nie działa! To jest wymysł IE, do którego Webkit się przystosował. Jedyny sprawdzony sposób na dostanie się do zdarzenia to mechanizm automatycznego przekazywania go jako 1. parametr, co nie działa w przypadku atrybutów [on…], przy których trzeba to zrobić samemu:
<button onclick="click(event)">Klik</button>