Comment supprimer une sous-chaîne à l'aide d'un script shell
J'ai cordes appelé:
abc.out
def.out
Comment puis-je supprimer le sous-chaîne
.hors
Dans ces chaînes?
Quelle commande dois-je utiliser?
(Bourne Shell)
OriginalL'auteur J0natthaaann | 2012-11-26
Vous devez vous connecter pour publier un commentaire.
Si ces chaînes de caractères sont stockées dans un fichier (appelons
input_file
):Que vous pouvez faire:
Et cela supprime toutes les occurrences de la sous-chaîne
.out
à partir de ce fichier.Explication:
sed
: appeler l' sed outil pour modifier les flux de texte-i
: utiliser le "sur place" option - cela modifie le fichier d'entrée que vous fournissez à la place de l'écriture de sortie destdout
's/\.out//g'
: Utiliser une expression régulière pour supprimer.out
. leg
à la fin signifie supprimer toutes les occurrences.input_file
: spécifiez le fichier d'entréeSi ces chaînes sont stockées dans des variables:
Vous pouvez utiliser paramètre de remplacement:
Explication:
g
drapeau est probablement pas souhaitable.Je suppose que cela dépend de exacte de l'entrée de ses fichiers: vous avez raison, je devrais faire mes hypothèses de plus en plus clair.
OriginalL'auteur sampson-chen
De multiples façons, une sélection:
str=abc.out
Shell:
Grep:
Sed:
Awk:
Coupe:
echo $str | cut -d. -f1
Tous de sortie:
OriginalL'auteur Chris Seymour
En général, de supprimer le plus court suffixe, utilisation:
À supprimer le plus long suffixe, utilisez
OriginalL'auteur William Pursell
J'ai trouvé ce qui a le mieux fonctionné, car le modèle que vous souhaitez utiliser peut être dans une variable:
Le résultat est:
abc
OriginalL'auteur Robin Zimmermann
Si ce sont des noms de fichiers, vous pouvez utiliser basename.
vous donnera:
basename -s .out a.out
fonctionne aussi, si vous aimez écrire vos options.OriginalL'auteur sureshvv