nous avons l'exemple de fichier suivant
nous voulons supprimer le caractère ,
sur la dernière ligne où le mot topic
existe
sed -i '${s/,[[:blank:]]*$//}' file
3 Réponses :
Vous devez utiliser l'adresse $
(dernière ligne):
sed '$s/,$//' file
Je l'ai testé, mais il n'a pas supprimé le ","
Utilisation de awk:
... {"topic":"life_is_hard","partition":98,"replicas":[1002,1001]}, {"topic":"life_is_hard","partition":99,"replicas":[1003,1002]}
Sortie:
$ awk '{if(NR>1)print p;p=$0}END{sub(/,$/,"",p);print p}' file
Je l'ai testé, mais il n'a pas supprimé le ","
Probablement les fins de ligne Windows ( \ r \ n
par opposition à \ n
utilisé par exemple dans Linux) alors. Vous pouvez: awk '{if (NR> 1) print p; p = $ 0} END {sub (/, \ r $ /, "\ r", p); print p}' file
c'est à dire. remplacez , \ r
par \ r
.
Si vous avez des caractères de contrôle M dans votre fichier d'entrée, supprimez-les en faisant:
tac Input_file | awk '/topic/ && ++count==1{sub(/,$/,"")} 1' | tac
Pourriez-vous s'il vous plaît essayer de suivre une fois. D'après votre question, ce que j'ai compris, c'est que vous voulez supprimer la virgule de la toute dernière ligne contenant la chaîne topic
, si tel est le cas, je propose tac
+ awk
solution ici.
tr -d '\r' < Input_file > temp && mv temp Input_file
Une fois que vous êtes satisfait des résultats ci-dessus, ajoutez > temp && mv temp Input_file
ci-dessus commande aussi, pour enregistrer la sortie dans Input_file lui-même.
Explication:
Un tac
lisez Input_file de la ligne du bas à la première ligne, puis passez sa sortie à awk où je vérifie si la première occurrence du sujet arrive, supprimez la virgule de la dernière et du reste des lignes, imprimez simplement, puis passez à nouveau cette sortie à tac pour rendre à nouveau Input_file sous sa forme originale.
Je pense que OP a des fins de ligne \ r \ n
et je n'ai aucune idée de la version awk.
Vous avez le même problème que moi, considérez , \ r
-> \ r
. Votre solution a fonctionné avec cela.
tr -d '\ r'
??
@ DavidC.Rankin, ahh merci, vous GEM pour ma défense il était 4 heures du matin :) :) Je l'ai corrigé maintenant. Merci de me le faire savoir.
Il semble que les lettres majuscules soient brisées sur votre clavier ou votre téléphone.