gpt4 book ai didi

regex - Perl Regex 来 Grep 一个不以特殊字符 _ 开头的词

转载 作者:行者123 更新时间:2023-12-02 07:34:17 35 4
gpt4 key购买 nike

我想要一个 perl 正则表达式从以下输出中 grep 一个词:

Process Completed;Result= Volume in drive D has no label.

Volume Serial Number is 328A-C899

Directory of D:\Program

07/14/2013 12:09 PM <DIR> .
07/14/2013 12:09 PM <DIR> ..
06/16/2013 01:07 PM <DIR> IPS
07/14/2013 12:10 PM <DIR> IPS1
07/14/2013 12:12 PM <DIR> IPS2
07/14/2013 12:16 PM <DIR> IPS3
07/14/2013 01:50 PM <DIR> IPS4
07/14/2013 12:17 PM <DIR> IPS5
07/14/2013 12:17 PM <DIR> IPS6
07/14/2013 12:18 PM <DIR> IPS7
07/14/2013 12:18 PM <DIR> IPS8
06/16/2013 01:10 PM <DIR> IPSCommon
07/08/2013 12:32 PM <DIR> _IPS10
07/08/2013 12:32 PM <DIR> _IPS11
07/08/2013 12:32 PM <DIR> _IPS12
07/08/2013 12:32 PM <DIR> _IPS13
07/08/2013 12:32 PM <DIR> _IPS14
07/08/2013 12:57 PM <DIR> _IPS15
07/08/2013 12:32 PM <DIR> _IPS16
07/08/2013 03:38 PM <DIR> _IPS17
07/08/2013 12:32 PM <DIR> _IPS18
07/08/2013 12:32 PM <DIR> _IPS9
0 File(s) 0 bytes
22 Dir(s) 770,968,162,304 bytes free
  • 要求是仅 grep 具有类似 IPS7 且不以 _ 开头的 IPS 单词

我使用了以下正则表达式 IPS\d+\d*$ 但这也会 grep 以 _ 开头的单词

我怎么指定!不是 _ 吗?

最佳答案

您正在尝试解析 Windows dir 的输出命令,我认为这是您尝试列出目录中的文件的尝试。您应该知道这不是实现该目标的好方法,我将向您展示一些替代方法。正则表达式的答案已经给出,所以我不会再费心了。

使用 glob , < ... > ,这几乎是对 shell 如何扩展通配符的模拟。

my @ips = grep /^IPS\d+/,      # only IPS with number
grep -d, # only directories
<D:/Program/IPS*>; # list IPS file in the target dir

使用 opendir .

opendir my $dh, "D:/Program" or die $!;
my @ips = grep /^IPS\d+/, readdir($dh);
closedir $dh;

使用 File::Find .请注意此选项是递归的(还将列出子目录中的文件):

use File::Find;    # core module in Perl 5
my @ips;
find(sub { push @ips, $File::Find::name if /^IPS\d+/ }, "D:/Program");

每种方法都有自己的优点。在您的情况下,最相似的方法是使用最上面的方法,即使用 glob 的方法。

关于regex - Perl Regex 来 Grep 一个不以特殊字符 _ 开头的词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18459640/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com