我在unix中编写一个名为pl_dict的TC shell脚本,它接受单数形式的英文单词列表作为输入,并在单独的行中打印出每个单词的复数形式。它使用包含英语单词列表的文件和另一个以单数形式接受英语单词作为其参数的程序,并打印该单词的复数形式。 这是我的代码:
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
直到我尝试运行它才能正常运行:pl_dict fish foot foox house mouse
我得到的输出是:
fish
feet
foox: word not found in dictionary.
Word too long.
问题是什么,我该如何解决?
谢谢。
答案 0 :(得分:3)
请尝试以下步骤:
第1步:
sudo apt-get install tcsh
第2步:
sudo update-alternatives --config csh
从可用选项列表中选择 tcsh 。
答案 1 :(得分:0)
我认为这是程序pluralize
的消息,我们需要该程序的文本来帮助您。
此外,每次运行脚本(gcc
行)时都不需要编译程序。你可以做一次,然后使用二进制文件。
答案 2 :(得分:0)
在tcsh 6.15之前,每行的最大长度有限制。 如果我没记错的话,它是4K字符。 如果违反限制,将显示该消息。
这通常是由shell扩展一个长变量引起的。 当我试图在同一行扩展复杂的$ PATH时,我遇到了这个问题。
要解决它,首先找出long变量。 使用
env | grep VARIABLE_NAME
和/或
set | grep VARIABLE_NAME
在变量扩展之前检查可疑变量。
另外,因为grep
的结果可能是数千行(例如is
),
如果您想要确切的结果,可以使用<>
指定边界
grep "\<WORD\>" /usr/share/dict/words
或使用awk,由technosaurus评论。
答案 3 :(得分:0)
我刚刚遇到同样的问题,这是扩展一个太长时间&#34;的shell变量的结果。我也像这样使用grep:
设置test_error =&#34; grep -P '^UVM_(ERROR|FATAL)\s+[^:]' $mylog
&#34;
...它匹配$ mylog中的多行并导致$ test_error成为一个巨大的多行字符串。解决方法是使用&#34; -m 1&#34;导致grep在第一场比赛后停止,如下所示:
设置test_error =&#34; grep -P -m 1 '^UVM_(ERROR|FATAL)\s+[^:]' $mylog
&#34;
在我的申请中,我只需要第一场比赛。不确定这是否适用于您的使用。