J'ai une chaîne comme AxxBCyyyDEFzzLMN et je veux remplacer toutes les occurrences de x , y et z par _ .
Comment puis-je atteindre cet objectif?
Je sais que echo "$string" | tr 'x' '_' | tr 'y' '_'
cela fonctionnerait, mais je veux le faire en une seule fois, sans utiliser de tuyaux.
AxyzB
? Trois soulignements ou un?tr '[xyz]'
remplacera[
et]
aussi. L'argument doit être simplement une liste de caractères (bien que les plages commea-z
soient correctes, et dans certaines implémentations, les classes de caractères POSIX comme[:digit:]
).Réponses:
remplacerait chaque occurrence de
x
,y
ouz
par_
, donnantA__BC___DEF__LMN
dans votre exemple.remplacerait les occurrences répétées de
x
,y
ouz
par un seul_
, donnantA_BC_DEF_LMN
dans votre exemple.la source
,[]{}()~
caractères. Je veux le remplacer par chaque caractère spécial échappé avec'\'
comment pourrais-je faire cela par oneshot?gsed
binaire:$ brew install gnu-sed
puis$ gsed -r 's/[xyz]+/_/g'
sed -E
est (fondamentalement) équivalent àsed -r
de nombreuses distributions Linux, si vous utilisez,sed 's/[xyz][xyz]*/_/g'
vous n'avez pas besoin de l'option. Bien sûr, cela équivaut àtr -s xyz _
aucun besoin réelsed
ici.tr
pour cela.sed 's/[][{}()~,]/\\&/g'
mais vraiment, posez une nouvelle question si vous avez une question de suivi (n'hésitez pas à renvoyer ici pour référence, bien sûr). Soit dit en passant,,
et~
ne sont pas des métacaractères regex (bien qu'il~
soit étendu à$HOME
certaines positions par Bash et certains autres obus; passh
cependant).Utilisation de l' expansion des paramètres Bash :
la source
bash
. D'autres obus peuvent ne pas fonctionner (bien que certains le fassent).sed
si bash a une substitution intégrée?Vous pourriez trouver ce lien utile:
http://tldp.org/LDP/abs/html/string-manipulation.html
En général,
Pour remplacer la première correspondance de $ substring par $ remplacement:
Pour remplacer toutes les correspondances de $ substring par $ remplacement:
EDIT: Notez que cela s'applique à une variable nommée $ string.
la source
^ utilisez-en autant que vous en avez besoin et vous pouvez créer votre propre cryptage BASIC
la source
Voici une solution avec l'expansion des paramètres du shell qui remplace plusieurs occurrences contiguës par une seule
_
:Notez que le modèle nécessite une correspondance de modèle étendue, activée avec
+(pattern)
Alternativement, avec l'
-s
option ("squeeze") detr
:la source