Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这是一个Perl脚本,用于grep从docx文件输入的模式。请任何人,请指出我的错误,让它工作? #!usr/bin/perl #script:patternsearch.pl:用于在文件中搜索特定模式的程序。 打印(“程序名称:$0\n”); 打印(“输入图案:\n”); 印章($图案=); 打印(“输入绝对文件夹路径:\n”); 印章($folder=); 打印(“输入文件类型:\n”); 印章($filetype=); 如果($pattern eq“”),则模具(“未输入图案???\n”); if($filetype eq“txt”){ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'grep-H$pattern$search>>patternsearch.txt`; } } 否则{ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'antiword$search | grep-H$pattern>>patternsearch.txt'; } } 打印(“任务已完成”\n);_Perl - Fatal编程技术网

这是一个Perl脚本,用于grep从docx文件输入的模式。请任何人,请指出我的错误,让它工作? #!usr/bin/perl #script:patternsearch.pl:用于在文件中搜索特定模式的程序。 打印(“程序名称:$0\n”); 打印(“输入图案:\n”); 印章($图案=); 打印(“输入绝对文件夹路径:\n”); 印章($folder=); 打印(“输入文件类型:\n”); 印章($filetype=); 如果($pattern eq“”),则模具(“未输入图案???\n”); if($filetype eq“txt”){ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'grep-H$pattern$search>>patternsearch.txt`; } } 否则{ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'antiword$search | grep-H$pattern>>patternsearch.txt'; } } 打印(“任务已完成”\n);

这是一个Perl脚本,用于grep从docx文件输入的模式。请任何人,请指出我的错误,让它工作? #!usr/bin/perl #script:patternsearch.pl:用于在文件中搜索特定模式的程序。 打印(“程序名称:$0\n”); 打印(“输入图案:\n”); 印章($图案=); 打印(“输入绝对文件夹路径:\n”); 印章($folder=); 打印(“输入文件类型:\n”); 印章($filetype=); 如果($pattern eq“”),则模具(“未输入图案???\n”); if($filetype eq“txt”){ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'grep-H$pattern$search>>patternsearch.txt`; } } 否则{ foreach$search(`find$folder-typef-name“*.$filetype”`){ 执行'antiword$search | grep-H$pattern>>patternsearch.txt'; } } 打印(“任务已完成”\n);,perl,Perl,*.docx文件不是纯文本,甚至不是真正的XML——它们是XML和其他东西的压缩包。无法在压缩文件中搜索文本。您可以解压*.docx,然后在内容中添加grep,尽管根据我的经验,XML是不换行的,因此每次grep命中都是文档的全部内容。您确实应该这样做 #!usr/bin/perl #script: patternsearch.pl : Program to search for specific pattern inside the file. print ("Prgramme name: $

*.docx
文件不是纯文本,甚至不是真正的XML——它们是XML和其他东西的压缩包。无法在压缩文件中搜索文本。您可以解压
*.docx
,然后在内容中添加grep,尽管根据我的经验,XML是不换行的,因此每次grep命中都是文档的全部内容。

您确实应该这样做

#!usr/bin/perl
#script: patternsearch.pl : Program to search for specific pattern inside the file.
print ("Prgramme name: $0 \n");

print ("Enter pattern: \n");
chop ($pattern = <STDIN>);

print ("Enter the absolute folder path: \n");
chop ($folder = <STDIN>);

print ("Enter file type: \n");
chop ($filetype = <STDIN>);

die ("pattern not entered??? \n") if ($pattern eq " ");

if ($filetype eq "txt") {
                foreach $search (`find $folder -type f -name "*.$filetype"`) {
                do `grep -H $pattern $search>> patternsearch.txt`;
                }           
            }
else {
    foreach $search (`find $folder -type f -name "*.$filetype"`) {
    do `antiword $search | grep -H $pattern >> patternsearch.txt`;
    }
     }
print ("Taskcompleted \n");
在每个程序开始时,使用
my
在首次使用时声明所有变量。这一点尤其适用于在程序中寻求帮助的情况,并且会很快引起人们对许多简单错误的注意

您应该使用
chomp
而不是
chop
,因为后者只是从字符串中删除最后一个字符,而前者在删除它之前检查它是否是行终止符(换行符)

我能找到的唯一问题是,您没有
chomp
backtick
find
命令的输出:您应该在
grep
antiword
命令之前编写
chomp$search
。另外(套用尤达的话)backticks命令之前没有
do
。将其从
grep
antiword
之前删除,您的程序就可以运行了


如果您有任何进一步的问题,请解释您期望的输出以及您得到的结果。

明显的错误在这里
do`grep-H$pattern$search>>patternsearch.txt`。这里不需要
do
。用backtick操作符替换它:
`grep-H$pattern$search>>patternsearch.txt`
,看看问题是否消失。不过,准确的错误信息会有所帮助。
use strict;
use warnings;