$ cat somefile.txt
afsdfv
asdf[ABC]dafga
asdfasf
yxcvyxv[/ABC]
asdadf
yv[ABC]sdfb
sdfgadfg
[/ABC]adf
asdf
$ cat somefile.txt | NEEDEDONELINER > output.txt
dafga
asdfasf
yxcvyxv
sdfb
sdfgadfg
$
因此“NEEDEDONELINER
”仅输出[ABC]
和[/ABC]
之间的字符。
[ABC]
可能会多次出现,并且可能会出现随机字符。
我只需要[ABC]
和[/ABC]
之间的随机字符。
我没有时间学习Perl:\
感谢您的期待!
答案 0 :(得分:1)
我看到猫完全没用了。
perl -le '$/="";$_=<>;print$2while/\[(ABC\])(.*?)\[\/\1/gs' <file.txt
(哦,这是一些不错的打高尔夫球; - )
答案 1 :(得分:0)
答案 2 :(得分:0)
m!\Q[ABC]\E\K(.*?)(?=\Q[/ABC]\E)!g;
但这并未考虑多线字符串 - 您的澄清有哪些。
use strict;
use warnings;
use 5.010;
open my $fh, '<', $ARGV[0];
my $full_file = do { local $/; <$fh> };
say join "\n", $full_file =~ m!
\Q[ABC]\E \K
(.*?)
(?=\Q[/ABC]\E)
!gxs;
或者作为一个单行:
perl -E 'say join qq!\n!, do { local $/; <> } =~ m!\Q[ABC]\E\K(.*?)(?=\Q[/ABC]\E)!gs' somefile.txt > output.txt
但是如果你的文件很大呢?只是将它们读入内存是行不通的。不过,你必须自己解决这个问题。
答案 3 :(得分:0)
几天前在Fedora邮件列表上提出了一个非常类似的问题。这是我给出的答案(需要一些相当明显的编辑):
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
if (m|\[XYZ]| .. m|\[/XYZ]|) {
next if m|\[/?XYZ]|;
print;
}
}