我编写了这个脚本,用于计算给定文件中特定模式的出现次数。但是,如果文本文件包含方括号或花括号,则shell会输出消息“Missing}”。这是脚本:
#!/bin/csh
@ count=0
foreach word ( `cat test` )
if (`echo $word | egrep -c 'int'`) then
@ count= $count + 1
endif
end
echo $count
答案 0 :(得分:3)
您需要引用word
的扩展:echo "$word"
。
如果您只想在一行上计算多次出现次数(因为grep -c
只计算至少有一次匹配的行),请使用tr
将正常空格更改为换行符(然后你可以使用grep -c
):
(tr ' \t' '\n\n' | fgrep -c int) < test
此外,scripting csh
is usually going to cause more problems than it is worth。尽管有他们自己的历史怪癖,但Bourne shell的脚本更好。如果您想确保您的代码是可移植的,请转到dash
。如果您需要更多电量,请与bash
,ksh
或zsh
一起使用。
csh% echo "foo \"bar\" \$ dollar"
csh: Unmatched ".
sh$ echo "foo \"bar\" \$ dollar"
foo "bar" $ dollar