Unix foreach不匹配-C shell脚本

Unix foreach不匹配-C shell脚本,unix,shell,scripting,foreach,Unix,Shell,Scripting,Foreach,我正试图编写我的第一个脚本,在名为test的文本文件中搜索给定的模式。以下是脚本: #! /bin/csh echo -n "enter pattern: " set pattern = $< foreach word (`cat test`) echo $word | egrep $pattern end #/bin/csh echo-n“输入模式:” 设置模式=$< foreach单词(`cat test`) echo$word | egrep

我正试图编写我的第一个脚本,在名为test的文本文件中搜索给定的模式。以下是脚本:

#! /bin/csh
 echo -n "enter pattern: "
  set pattern = $<
    foreach word (`cat test`)
         echo $word | egrep $pattern
    end
#/bin/csh
echo-n“输入模式:”
设置模式=$<
foreach单词(`cat test`)
echo$word | egrep$模式
结束

当我尝试运行它时,我得到消息foreach:找不到匹配项。我怀疑问题是由(
cat测试
)引起的。任何帮助都将不胜感激。

是否必须是C shell。。。?您可以学习使用awk搜索文件

awk 'BEGIN{
 printf "Enter Pattern: "
 getline pattern < "-"
}
$0 ~ pattern{
    print 
}
' myfile
awk'开始{
printf“输入模式:”
getline模式<“-”
}
$0~图案{
印刷品
}
“我的文件

@Pat-很高兴你把它修好了。循环文件中的单词并在每个单词上运行egrep是一种有点奇怪的方法——我想您正在学习C shell循环,而不是寻找最简洁的解决方案。您可以一次性匹配整个文件:

egrep "\b$pattern\b" test
\b
在单词边界上进行grep匹配


我很同情csh的编程,这里有一些值得思考的东西:。

好的,问题解决了。在打开括号和关闭括号之前必须有空格。它按原样对我有效(没有添加空格)。所以可能是C shell的问题。谢谢Martin。这是我课程作业的一部分,不幸的是我们不得不使用C shell。至于被认为有害的Csh编程,我已经读过了:)。