Wie zu lösen "Wort zu lang" - Fehler in unix?
Schreibe ich eine TC-shell-Skript namens pl_dict in unix das akzeptiert eine Liste von englischen Wörtern in singular-form als Eingabe und druckt die Pluralform der jedes Wort in einer separaten Zeile. Es wird eine Datei mit einer Liste von Wörtern in der englischen Sprache und ein anderes c-Programm, das akzeptiert ein Englisches Wort in singular-form als argument und druckt die plural form des Wortes.
Hier ist mein code:
set dictionary = (/usr/share/dict/words)
set irregular = (/share/files/irregular.txt)
#go over all the input words
foreach word ($argv[*])
set irregularWord = `grep $word $irregular | cut -d" " -f1`
#the word is found in irregular.txt file
if ("$irregularWord" != "") then
gcc -o pluralize pluralize.c
./pluralize -f irregular.txt $word
else #the word is not found in the irregular file
#search for it in the dictionary
set realEnglishWord = `grep $word $dictionary`
#the word is a real English word
if ("$realEnglishWord" != "") then
gcc -o pluralize pluralize.c
./pluralize $word
else
echo "$word":" word not found in dictionary."
endif
endif
end
Funktioniert es ganz gut, bis ich versuchen zu verkehren diese: pl_dict Fische Fuß foox Haus-Maus
Hier die Ausgabe die ich bekomme, ist:
fish
feet
foox: word not found in dictionary.
Word too long.
Was ist das problem und wie kann ich es beheben?
Danke.
- Versuchen Sie, einige debug-Echos, um zu sehen, was $word ist ... grep kann passend sein, mehrere Zeilen aus dem Wörterbuch ... Wenn dem so ist, können Sie mit awk und machen eine genaue übereinstimmung von $1
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie die folgenden Schritte aus:
Schritt 1:
Schritt 2:
Wählen Sie tcsh aus der Liste der Wahlmöglichkeiten.
Ich nehme an, dass dies ist eine Nachricht von dem Programm
pluralize
, und wir müssen den text des Programms, um Ihnen zu helfen.Auch, Sie brauchen nicht zu kompilieren Sie das Programm, jedes mal, wenn Sie das Skript ausführen (
gcc
Linie). Sie können tun Sie es einmal und verwenden Sie dann die binäre.Bevor tcsh 6.15, es ist eine Beschränkung auf die maximale Länge pro Zeile.
Wenn ich mich Recht erinnere, es ist 4K-Zeichen.
Die Meldung wird angezeigt, wenn die Beschränkung verletzt wird.
Dies ist oft verursacht durch die shell expandiert eine long variable.
Ich hatte dieses problem als ich versucht habe, erweitern eines komplexen $PFAD zweimal in der gleichen Zeile.
Um es zu lösen, finden Sie heraus, die long-Variablen erste.
Verwenden
und/oder
bevor die variable expansion zu überprüfen die im Verdacht Variablen.
Auch, weil das Ergebnis
grep
sein könnten Tausende von Zeilen (z.B.is
),wenn Sie möchten, dass das genaue Ergebnis, können Sie
<>
angeben Grenzeoder mit awk, wie kommentiert von technosaurus.
Ich traf das gleiche problem und es war das Ergebnis der Erweiterung eines shell-variable, der war "zu lang". Ich war auch mit grep-so:
set test_error = "
grep -P '^UVM_(ERROR|FATAL)\s+[^:]' $mylog
"... das war mehrere passende Zeilen in $mylog und verursacht $test_error zu einem riesigen multi-line string. Das Update war die Verwendung von "-m 1" zu verursachen grep halt nach dem ersten match wie diesem:
set test_error = "
grep -P -m 1 '^UVM_(ERROR|FATAL)\s+[^:]' $mylog
"In meiner Anwendung brauchte ich nur die erste übereinstimmung. Nicht sicher, ob diese für Ihre Nutzung.