【发布时间】:2021-11-03 13:53:32
【问题描述】:
我正在尝试使用 grep 的 -P 选项在命令行进行过滤,这应该是使用 perl 的正则表达式
ls | grep -P ZZZZZTYT.vcf.gz 有效
但是
ls | grep -P ZZZZZTYT.vcf.gz$
不起作用。对于 GNU grep 3.4,锚点似乎不适用于 grep -P。
这些例子当然是微不足道的。
我也尝试过使用单行过滤器,例如 perl one-liner like grep?
ls | perl -ne 'print $1 if not $_ =~ m/\.gz$/'
但这也没有用。
ls | perl -ne 'print $1 if not /\.gz$/'
我的猜测是最好的选择是 perl one-liner。
如何重写上面的单行代码以在文件列表上进行 grep?
【问题讨论】:
-
@WiktorStribiżew 我不知道,文件名中有 CRLF 吗?
ls | perl -ne 'print $_ if not /\.gz$/'也失败了 -
@WiktorStribiżew
dos2unix打印出dos2unix: Binary symbol 0x1F found at line 1 dos2unix: Skipping binary file ZZZZZTYT.vcf.gz所以我的猜测是肯定的,这是按预期工作的。我在 Ubuntu 上 -
@WiktorStribiżew 不应该将文件名解释为字符串?
-
对不起,我好像在这里搞糊涂了。我不明白为什么你现在应该看到这个问题。
-
Re "应该是用perl的正则表达式",不,应该是用PCRE