Perl 仅输出介于[ABC]和[/ABC]之间的字符
因此“Perl 仅输出介于[ABC]和[/ABC]之间的字符,perl,scripting,Perl,Scripting,因此“NEEDEDONELINER”只输出[ABC]和[/ABC]之间的字符 [ABC]可能会出现多次,并且周围可能有随机字符 我只需要[ABC]和[/ABC]之间的随机字符 我没有时间学习Perl:\ 谢谢你的反对 修复: 我认为猫完全没有用处 $ cat somefile.txt afsdfv asdf[ABC]dafga asdfasf yxcvyxv[/ABC] asdadf yv[ABC]sdfb sdfgadfg [/ABC]adf asdf $ cat somefile.txt |
NEEDEDONELINER
”只输出[ABC]
和[/ABC]
之间的字符
[ABC]
可能会出现多次,并且周围可能有随机字符
我只需要[ABC]
和[/ABC]
之间的随机字符
我没有时间学习Perl:\
谢谢你的反对 修复:
我认为猫完全没有用处
$ 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
$
perl-le'$/=”;$\u=;打印$2while/\[(ABC\])(.*?\[\/\1/gs'是的。
然后呢
但这并没有考虑到多行字符串——您的澄清已经说明了这一点
m!\Q[ABC]\E\K(.*?)(?=\Q[/ABC]\E)!g;
使用严格;
使用警告;
使用5.010;
打开我的$fh,“几天前,Fedora邮件列表上有人问了一个非常类似的问题。下面是我在那里给出的答案(需要一些相当明显的编辑):
!/usr/bin/perl
严格使用;
使用警告;
而(){
if(m|\[XYZ]|…m|\[/XYZ]|){
下一个如果m\[/?XYZ];
印刷品;
}
}
任何空格都只会使实现“一行”的目标变得更加困难-如果命令也是60个字符,那么PS1提示符和文件名在许多情况下已经超过终端窗口80中的一行。
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
#!/usr/bin/perl
use strict;
use warnings;
while (<>) {
if (m|\[XYZ]| .. m|\[/XYZ]|) {
next if m|\[/?XYZ]|;
print;
}
}