2017-01-19 2 views

Répondre

0

Vous stockez actuellement un ensemble de noms, puis passez à sed. Lorsque le glob est étendu cela devient une commande sur le formulaire:

1butene.com xxxx | sed 's/.com//g' 

Ce qui est évidemment pas quelque chose autorisée, comme 1butene.com n'est pas une commande par lui-même.


Ce que vous devez faire est de

1) stocker les données,
2) effectuer le nettoyage.

Pour cela, nous avons de bonnes nouvelles! Vous pouvez effectuer Shell parameter expansion on arrays!

De cette façon, vous pouvez stocker les données dans un tableau:

names=(*.com) 

Et puis effectuer le remplacement dans tous par tout extracting its name, sans l'extension:

printf "%s\n" "${names[@]%.*}" 

Si vous souhaitez ensuite à change values of bash array elements without loop, il suffit d'utiliser la syntaxe

new_array=("${names[@]%.*}") 

Exemple:

$ touch a{1..3}.{sql,com} 
$ com_names=(*com) 
$ printf "%s\n" "${com_names[@]}" 
a1.com 
a2.com 
a3.com 
$ printf "%s\n" "${com_names[@]%.*}" 
a1 
a2 
a3 
b=("${com_names[@]%.*}")   # assign to a new array 
$ printf "%s\n" "${b[@]}" 
a1 
a2 
a3 
+0

OK, qui semble fonctionner en quelque sorte. Mais comment puis-je stocker ces noms dans le tableau? Si je fais test = (\ *. Com), puis test = $ {"% \ n" "$ {noms [@]%. \ *}"} $ Test est vide – user7408924

+0

@ user7408924 voir la dernière partie de mon explication , avant la section _Sample_: 'var = (" $ {... [@]%. *} ")'. Aussi, essayez de ne pas utiliser le nom 'test' pour les variables, puisqu'il s'agit d'une commande elle-même! – fedorqui

+0

Din't voir votre dernière édition. Travaux! THX! – user7408924