我有一个命名为yyyyMMdd的文件列表。我想要除几个日期外的文件清单。为此,我使用以下命令
$ ls | grep -ve 202003{04,11,23}
grep: 20200311: Is a directory
grep: 20200323: Is a directory只有当我手动展开大括号,并将选项-e放在中间以使其间距时,该命令才有效。
ls | grep -v -e 20200304 -e 20200311 -e 20200323什么是更有效的方式呢?
发布于 2020-03-25 11:06:54
你不能像你想要的那样用shell展开来做这件事,因为它会用多个单独的参数替换你的单个参数(如果且仅当存在与模式匹配的文件或目录时-如果没有匹配,其他不希望发生的事情可能会发生)。但是,grep的参数是正则表达式。使用扩展正则表达式( -E标志)可以做到这一点。
$ ls | grep -vEe "202003(04|11|23)"请注意,您不需要为单个搜索参数使用-e,因此
$ ls | grep -vE "202003(04|11|23)"也是有效的。
发布于 2020-03-25 11:08:15
你可能需要这个:ls | grep -vP "202003(04|11|23)"
如果-P不起作用,请尝试用-E替换它。
https://stackoverflow.com/questions/60842428
复制相似问题