来自ls的Grep文件名用于它们的特定部分

时间:2015-04-07 22:30:13

标签: grep

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

ls -1

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

所以我想只得到名字的部分。 如何实现这一目标?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

ls -l | cut -f2 -d-

从输入中剪切第二个字段,使用' - '作为字段分隔符。其他人的答案将正确处理我不会的一些案例,但对于一次性使用,我通常会发现切割的语义更容易记住。