来自 ls 的 Grep 文件名用于其中的特定部分

Grep Filenames from ls for specific part of them

我想从文件名中提取特定部分以使用它们。 示例:

ls -1

REZ-Name1,Surname1-02-04-2012.png
REZ-Name2,Surname2-07-08-2013.png
....

所以我只想得到有名字的部分。 如何实现?

有几种方法可以做到这一点。这是一个循环:

for file in REZ-*-??-??-????.png
do
  name=${file#*-}
  name=${name%-??-??-????.png}
  echo "($name)"
done

给定各种文件名,其中包含间距、附加连字符和换行的各种边缘情况:

REZ-Anna-Maria,de-la-Cruz-12-32-2015.png
REZ-Bjørn,Dæhlie-01-01-2015.png
REZ-First,Last-12-32-2015.png
REZ-John Quincy,Adams-11-12-2014.png
REZ-Ridiculous example                            # this is one filename
is ridiculous,but fun-22-11-2000.png              # spanning two lines

它输出:

(Anna-Maria,de-la-Cruz)
(Bjørn,Dæhlie)
(First,Last)
(John Quincy,Adams)
(Ridiculous example
is ridiculous,but fun)

如果您不太关心正确性,可以进一步简化它:

$ ls | grep -o '[^-]*,[^-]*'
Maria,de
Bjørn,Dæhlie
First,Last
John Quincy,Adams
is ridiculous,but fun

在这种情况下,cut 比 grep 更有意义:

ls -l | cut -f2 -d-

从输入中删除第二个字段,使用“-”作为字段分隔符。其他人的回答会正确处理某些我不会的情况,但对于一次性使用,我通常发现 cut 的语义更容易记住。