Ответ 1
с помощью sed?
ls -1 | sed -e 's/\..*$//'
Предположим, что у меня есть каталог с некоторыми файлами:
$ 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, которое вы хотите.
РЕДАКТИРОВАТЬ: Включить речной поток - это тоже кусок пирога, так как срез может начинаться и с самого конца, хотя логика несколько отличается. Вот пример с кучей файлов со случайными именами, некоторые с двумя точками, некоторые с одной точкой, а некоторые без расширения:
[email protected]:~/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
[email protected]:~/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
Используя минус перед номером поля, он устраняет все НО, но указанные поля (в этом случае 1,2) и откладывая его, заставляет его начинать отсчет с конца.
Эта же нотация может использоваться для смещения и символов кроме полей (см. справочную страницу)