假设我有一个包含一些文件的目录:
$ ls
a.c b.c e.c k.cpp s.java
如何在没有文件扩展名的情况下显示结果(点后面的部分,包括该点)?像这样:
$ <some command>
a
b
e
k
s
用sed?
ls -1 | sed -e 's/\..*$//'
ls | while read fname
do
echo ${fname%%.*}
done
试试吧。
ls -a | cut -d "." -f 1
男人(1)切
非常方便,-d开关定义了分隔符和-f所需的字段。
编辑:包括riverfall's场景也是一块蛋糕,因为切割也可以从最后开始,虽然逻辑有些不同。这里有一组带有随机名称的文件的示例,一些带有两个点,一些带有一个点,一些带有无扩展名:
runlevel0@ubuntu:~/test$ ls
test.001.rpx test.003.rpx test.005.rpx test.007.rpx test.009.rpx testxxx
test.002.rpx test.004.rpx test.006.rpx test.008.rpx test_nonum test_xxx.rtv
runlevel0@ubuntu:~/test$ ls | cut -d "." -f -2
test.001
test.002
test.003
test.004
test.005
test.006
test.007
test.008
test.009
test_nonum
testxxx
test_xxx.rtv
使用字段编号之前的减号使它消除所有BUT指示的字段(在这种情况下为1,2)并将其置于后面使其从结束开始计数。
除了字段之外,相同的表示法可用于偏移和字符(参见手册页)