0
votes

Remplacer la chaîne en bash avec une condition spécifique

Si j'ai une chaîne:

chemin1 = / chemin / moi et vous / fichier.json & path2 = / chemin / vous et moi / file.txt

Je m'attends à ce que la sortie soit comme celle-ci:

chemin1 = / chemin / me & vous / fichier.json; chemin2 = / chemin / You & Me / File.txt

J'ai besoin de remplacer & que c'est avant et arrière non contenant espace , j'ai essayé avec SED

chemin1 = / chemin / moi; vous / fichier.json; chemin2 = / chemin / vous; me / fichier.txt


2 commentaires

Essayez-vous réellement d'analyser les paramètres de requête URL?


Votre question devrait vraiment inclure le script sed que vous avez essayé et vous expliquer peut-être votre pensée derrière elle.


3 Réponses :


1
votes

Vous pouvez utiliser [^] pour correspondre à un caractère non-espace et assurez-vous qu'il est dans un \ (Capture Group \) afin que vous puissiez le faire référence dans le String de remplacement: xxx

Ceci trouve une séquence de trois caractères de non-espace & non-espace et Remplace les deux caractères capturés, remplaçant efficacement tout & sans espace à côté de celui-ci.

Ceci affectera foo & bar mais pas foo & bar ou foo & bar ou & foo


1 commentaires

L'attente de l'OP serait la suivante: SED -E 'S / \ ([^] \) & \ ([^] \) / \ 1; \ 2 /' . Vous avez peut-être oublié le point-virgule entre les deux.



0
votes
sed -r 's/(\S)&(\S)/\1;\2/g'
Where -r enable regex and \S is all except spaces.

0 commentaires

0
votes

Je suppose que vous recherchez peut-être que vous recherchez

sed 's/&\([a-z][a-z0-9]*=\)/;\1/g'


0 commentaires