Shell命令对文件的每一行
问题描述:
我正在尝试编写一个Perl脚本,它将执行以下操作:
1.打开一个文件,其中每行包含多个文件的位置(说文件A,文件B )
2.请在每个文件的egrep的类似egrep的“模块|输入|输出”
3.将使用相同的文件名A,B等,但在不同的目录中的egrep的输出)Shell命令对文件的每一行
egrep有更多限制,但我可以稍后添加它们。
我的问题是我该如何做第2步和第3步?在哪里,我在我的Perl脚本打开的文件的每一行执行一个shell命令。而文件的位置将是,例如,design/rtl/name.v
和我想的egrep的结果存储在design/fake/name.v
答
遍历文件名是这样的:
while read file
do
egrep "module|imput|ouput" "$file" > "/another/directory/${file##*/}"
done < fileList.txt
答
在外壳(bash)的创建一个目录结果并列出一个文件到文件“列表”一条线,然后就在bash中键入此直提示
for i in `cat list`;do egrep "string" $i > result/grep${i}; done
这里是在Perl相似。错误行为更好,它可能会快一点:真正的优势是可以更容易地添加额外的行为。将其保存为一个文件并运行为“perl脚本列表富”,其中的脚本是脚本的文件名,目录是文件和Foo列表的文件名正在搜索
#!/usr/bin/perl
#
my ($file, $pattern) = @ARGV;
open(my $fh, $file) || "die $! $file\n";
while (<$fh>) {
chomp; #trim newline from filename
my $togrep = $_;
open(my $grepfh, $togrep) || warn "$togrep $!";
if ($grepfh) {
open(my $output, ">result/$togrep") || die "$togrep $!";
while (grep($pattern, <$grepfh>)) {
print $output $_;
}
}
}
为什么用perl模式做什么真的应该是一个shell脚本? – 2013-04-05 07:57:00
如上所述,它更像是一个shell脚本问题,但它可能会更好地使用Perl自己的文件读取和搜索功能,而不是调用'egrep'。 – 2013-04-05 08:04:16