我编写了一个程序,该程序应该搜索一长串随机数字以找到pi的最长十进制表示形式(但不能超过9)。代码是:
read -p 'Please specify one: ' fil1
dire=$( locate $fil1 )
if[ <grep -o '314159265' $dire | wc -w> -gt 0 ]
then
echo The longest decimal representation has 9 digits.
return [0]
fi
if[ <grep -o '31415926' $dire | wc -w> -gt 0 ]
then
等
我的错误消息是wc: 0] No such file or directory ./pierex.sh: line 7: grep: No such file or directory
,并且在出现这些命令的每一行中都类似。我做错了什么?
答案 0 :(得分:2)
像这样的行
if [<grep -o '31415925' $dir3 | wc -c> -gt 0]
应为:
if [ $(grep -o '31415925' $dir3 | wc -c) -gt 0 ]
用于替换命令输出的语法为$(command)
,而不是<command>
。与其他命令一样,[
命令在命令名称和参数之间需要一个空格。
顺便说一句,您无需重复运行grep
就可以做到这一点。您可以使用:
match=$(grep -o -E '3(1(4(1(5(9(26?)?)?)?)?)?)?' "$dire")
这将返回最长的匹配项,然后您就可以得到$match
的长度。假设文件中只有一个匹配项;如果不是,则可以按长度对结果进行排序,并得到最长的结果。参见Sort a text file by line length including spaces
还请注意,所有这些正则表达式都将与另一个数字中间某个位置的π的数字匹配。 42 31314 。为防止这种情况,您应该在开头匹配一个非数字:
grep -o -E '(^|[^0-9])31415925'