【问题标题】:foreach no match -C shell scriptforeach 不匹配 -C shell 脚本
【发布时间】:2009-10-31 09:53:20
【问题描述】:

我正在尝试编写我的第一个脚本来搜索名为 test.txt 的文本文件中的给定模式。这是脚本:

#! /bin/csh
 echo -n "enter pattern: "
  set pattern = $<
    foreach word (`cat test`)
         echo $word | egrep $pattern
    end

当我尝试运行它时,我收到消息 foreach: No match found。我怀疑问题是由 (cat test) 引起的。任何帮助将不胜感激。

【问题讨论】:

  • 它按原样为我工作(不添加空格)。
  • 所以可能是C shell的问题。

标签: unix shell scripting foreach


【解决方案1】:

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

awk 'BEGIN{
 printf "Enter Pattern: "
 getline pattern < "-"
}
$0 ~ pattern{
    print 
}
' myfile

【讨论】:

  • 好的问题解决了。开括号后和右括号之前必须有空格。
【解决方案2】:

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

egrep "\b$pattern\b" test

\b 在单词边界上进行 grep 匹配。

我对 csh 编程表示同情 - 这里有一些值得深思的地方:Csh Programming Considered Harmful

【讨论】:

  • 谢谢马丁。这是我的课程作业的一部分,不幸的是我们必须使用 C shell。至于 Csh Programming Considered Harmful 我已经读过了 :)。
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
相关资源
最近更新 更多