【发布时间】:2019-06-01 00:03:44
【问题描述】:
我尝试了网络搜索并阅读了关于 stackexchange 的几个答案,但仍然无法理解为什么命令不提取任何内容。最后我想从不同的行提取组,例如来自
Code>TEST1<Code Code2>best<Code2
Code>test2<Code
Type>false<Type
通过在Type 之间找到所需的密钥并在结果上方提取第一个Code,因此在上面的情况下得到test2。但我无法成功地从多行中提取一些东西,即
perl -lne 'print $1,"_",$2 if /Code>(.*)<Code[\s\S\n]*?Type>(.*)<Type/'<test.txt 不打印任何内容。
我玩过删除ln 参数和添加/删除贪婪? 并尝试用. 代替[\s\S\n]。
perl -lne 'print $1,"_",$2 if /Code>(.*)<Code[\s\S\n]*?Code2>(.*)<Code2/'<test.txt
给出TEST1_best,所以同一行提取工作。
我错过了什么?我想要的可以在一行命令中完成吗?
【问题讨论】:
-
-n导致代码每行都运行,所以$_只包含一行。至少,你需要-0777让-n一次读取整个文件。 -
@ikegami,我尝试删除
-n,-0777是什么 - 其他参数? -
如果您忽略了
-n,您将得到一个根本不读取任何内容的程序! -
就像我说的,它会导致
-n(嗯,从技术上讲,任何readlineaka<>aka<$fh>aka<FH>)一次读取整个文件而不是一行一次。 -
@ikegami,在阅读了更多关于 perl 的内容后,我现在想象你在写第二条评论时笑了,我自己也想笑。