Je veux écrire un filtre sed qui change toutes les périodes de son entrée en points d'exclamation, sauf si le point est à la fin d'une ligne, auquel cas la période est remplacée par 2 points d'exclamation (c'est à dire. !!).sed filtre pour remplacer '!' pour les périodes et '!!' pour les périodes à la fin des lignes
Jusqu'à présent, voici ce que j'ai:
sed -e 's/\./\!/g' -e 's/\!\n/\!\!\n/g' input_exp
où input_exp est un fichier qui a quelques phrases écrites en elle. La commande ne fonctionne pas cependant. Est-ce que '\ n' n'est pas le bon caractère de fin de ligne dans unix/bash? Ai-je besoin d'un '\' supplémentaire avant '\ n'?
Merci pour votre aide.
Le problème principal avec ceci est que le \ n n'est pas remplacé par un saut de ligne lorsque vous placez le motif dans des guillemets simples - il est traité comme une barre oblique littérale et ensuite un n. Si vous mettez le motif entre guillemets, alors vous devez également échapper à la! chars (que vous avez fait inutilement ici). :) La réponse ci-dessous qui utilise un $ au lieu d'un \ n est correcte. Il est probablement aussi légèrement plus rapide de faire les vérifications dans l'ordre inverse, comme dans la réponse de Darioo (puisque cela aurait juste une substitution par ligne, par opposition à deux). – dannysauer
Non seulement cela, mais l'ordre dans lequel l'original est écrit doublera '!' À la fin d'une ligne, qu'il soit ou non un '.'. –