Supposons que j'ai un répertoire avec quelques fichiers:
$ ls
a.c b.c e.c k.cpp s.Java
Comment puis-je afficher le résultat sans l'extension de fichier (la partie qui suit le point, y compris ce point)? Comme ça:
$ <some command>
a
b
e
k
s
en utilisant sed?
ls -1 | sed -e 's/\..*$//'
ls | while read fname
do
echo ${fname%%.*}
done
Essayez ça.
ls -a | cut -d "." -f 1
homme (1) coupé
Très pratique, le commutateur -d définit le délimiteur et le champ -f que vous souhaitez.
EDIT: Inclure Riverfall's le scénario est également un jeu d'enfant car la coupe peut également commencer à la fin, bien que la logique soit quelque peu différente. Voici un exemple avec un tas de fichiers avec des noms aléatoires, certains avec deux points, certains avec un seul point et certains sans extension:
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
En utilisant le moins avant le numéro de champ le fait éliminer tous MAIS les champs indiqués (1,2 dans ce cas) et le mettre derrière le fait commencer à compter à partir de la fin.
Cette même notation peut être utilisée pour l'offset et les caractères en plus des champs (voir la page de manuel)