我找到了一些带有perl的命令行,它将标题插入到我的文件中,而不经过逐个插入它们的繁琐过程。有人可以引导我完成此命令行的perl方面吗?我是新手,似乎无法找到我所写内容的正确解释。谢谢!
cat header.txt | perl -0 -i -pe'BEGIN {$ h =};打印$ h'1 *
答案 0 :(得分:1)
欢迎来到stackoverflow!
-e 而不是在xxxx.pl文件中提供脚本,在命令行上提供它
-p 使它迭代文件名参数有点像sed,但也在脚本的末尾打印$ _的内容。
以上两者合并在-pe
中-i 表示您要编辑该文件并将输出写入同一文件。在实践中,Perl重命名输入文件并从此重命名的版本读取,同时写入具有原始名称的新文件
-0 重新定义记录字符的结尾(默认为\ n),以便您可以将整个输入文件作为单行读取
1 * 是你的脚本的命令行参数,所以我猜你正在修改名称以1开头的任何文件(你可以使用* .c,或者根据你试图修改的文件类型等)
打印$ h 打印变量$ h,它是脚本的“主要”。如果它是用头文件的内容初始化(这个单行的意图)那么它将打印头文件
BEGIN {这里有些代码} 这是您在脚本启动之前执行的内容。这是我难倒的地方。这似乎不是有效的perl代码
基本上是这样的: - 这应该会在BEGIN块中啜饮整个头文件(因为-0)并将其存储在变量$ h中 - 遍历命令行末尾的通配符指定的所有文件 - 对于每个文件:打印标题(打印$ h)然后打印hte文件本身(因为-pe)所以它等同于拼出脚本:
$h = gets content of the entire header file
while (<>){ #loop implied by -pe, iterates over all the 1* files
# the main contents of the "-e" script are inserted below as part of executing -pe
print h$; #print the header we saved
print $_; # implied by -pe, and since we are using -0, this prints the entire content in one shot
# end of the "-e" script. again it was a single print $h statement, the second print is implied by -pe
}
有点难以解释,请查看perlrun文档了解详细信息。
这不是100%完整的解释,因为我不认为BEGIN块是正确的。我在我的ubuntu机器上尝试过,它也抱怨它的语法