J'ai une virgule flottante à la fin d'un fichier que je voudrais remplacer par un crochet fermant. Il se peut qu'il y ait ou non un caractère de retour à la ligne à la fin du fichier. Comment puis-je remplacer le ou les deux caractères avec le crochet à l'aide d'outils Unix communs?Comment remplacer le dernier ou les deux derniers caractères d'un fichier avec des outils Unix
Répondre
Cela supprimera toutes les lignes vides de fuite, puis remplacer la dernière virgule dans le fichier avec un « ] »
cat origfile | sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' | sed -e '$s/,$/]/' > outputfile
Brian, merci pour celui-ci. Je ne me suis pas rendu compte avant d'essayer que les suggestions ci-dessus remplacent toutes les virgules par des fermetures fermées plutôt. Votre seconde déclaration sed est juste ce que je cherchais. –
Euh, hein? La réponse de Matt est la seule qui pourrait être incorrecte. – ephemient
pas besoin de chat. – ghostdog74
Généralement, les fichiers texte doivent se terminer par un saut de ligne.
Une façon de modifier un fichier pour remplacer par des virgules arrière avec le support de près la dernière ligne est:
ed - $file <<'!'
$s/,$/]/
w
q
!
Cela va à la dernière ligne, remplace la virgule finale avec support à proximité, et écrit et sorties. Vous pouvez également, en utilisant sed:
sed '$s/,$/]/' $file > new.$file &&
mv new.$file $file
Si vous avez GNU sed, il y a une option 'écraser' ('-i', IIRC).
Si vous devez traiter avec des noms de fichiers plutôt que le contenu du fichier, puis:
newname=$(echo "$oldname" | sed 's/,$/]/')
Et sans doute il y a d'autres mécanismes aussi. Vous pouvez également utiliser Perl ou Python; ils tendent vers l'exagération pour l'exemple demandé.
Je pense que je ne comprends probablement pas le 'sed' correctement. Un saut de ligne ne ferait-il pas sauter le $ à la ligne vide, sur lequel il ne trouverait pas de virgule et sortirait rapidement? – jdmichal
Non, '$' signifie "dernière ligne". La dernière ligne peut se terminer par \ n (ce qui est généralement le cas sous UNIX); ce sera toujours la dernière ligne. – ephemient
Sed peut facilement faire remplacer à la dernière ligne seulement:
sed '$ s/,/]/g' inputFile
Le sélecteur d'adresse $ indique la dernière ligne.
Si le fichier se terminait par un saut de ligne, cela ne changerait rien à cela. Est-ce vraiment un comportement désiré, ou voulez-vous juste remplacer le dernier, avec]?
Merci, c'est exactement ce que je cherchais. Et oui, vous avez raison, je ne me soucie pas vraiment de savoir s'il y a ou non un saut de ligne, je veux juste que la virgule soit remplacée. Merci! –
La commande remplace toutes les virgules de la dernière ligne. Vous devriez utiliser ''$ s /, $ /] /'' si vous voulez seulement remplacer la dernière virgule. – mouviciel
perl -i -pe'BEGIN{undef$/}s/,\n?\Z/]/'
est ici une méthode plus rapide par rapport à utiliser sed pour de gros fichiers, en supposant que la dernière ligne n'est pas une nouvelle ligne
head -n -1 file > temp;
s=$(tail -1 file)
echo ${s/%,/]} >> temp
echo mv temp file
- 1. Remplacer la chaîne des derniers deux appariements
- 2. La lecture des 50 derniers caractères d'un fichier avec fseek()
- 3. PHP Couper les derniers caractères d'un nom de fichier
- 4. Remplacer \ n avec \ r \ n dans le fichier Unix
- 5. Comment supprimer les deux premiers et les deux derniers caractères d'une chaîne?
- 6. Supprimer des lignes d'un fichier (utiliser des outils Unix)
- 7. Suppression des deux derniers caractères de chaque ligne dans un fichier texte
- 8. Comment remplacer tous les deux espaces, mais pas le premier/le dernier avec " " dans une chaîne donnée?
- 9. Remplacer les derniers chiffres d'un entier
- 10. Remplacer les caractères dans le fichier par index
- 11. Remplacer/supprimer chaîne entre deux caractères
- 12. Supprimer les 10 derniers caractères d'un fichier texte
- 13. unix commande sed pour les caractères échappées
- 14. Remplacer les caractères étrangers
- 15. Vérifiez si les derniers caractères d'un NSString sont des nombres
- 16. Comment remplacer les caractères spéciaux xml manuellement?
- 17. Récupère les 5 derniers caractères d'une chaîne
- 18. Comment rassembler les statistiques d'utilisation des caractères dans un fichier texte en utilisant des commandes Unix?
- 19. expression régulière: extrait les 2 derniers caractères
- 20. Comment remplacer tout le texte entre deux phrases avec des expressions régulières dans Notepad ++ ou Textpad?
- 21. sélectionner le premier et les deux derniers éléments
- 22. remplacer les mêmes caractères avec des chaînes différentes
- 23. Remplacer les caractères dans le routeurl?
- 24. Remplacer les caractères spéciaux à partir d'un fichier
- 25. Remplacer les caractères
- 26. saisir le nom d'utilisateur fréquent de la commande 'dernier' dans unix - avec des exceptions
- 27. Comment remplacer le balisage dans les fichiers html stockés sur des serveurs Unix/Solaris?
- 28. Comment remplacer les caractères String en C#
- 29. enlever les 3 derniers caractères sur un fichier (extension de fichier)
- 30. Extraire les deux derniers mots d'une cellule en utilisant openoffice
Contenu du fichier ou nom de fichier? –
Contenu du fichier ... désolé pour ce Jonathan. Je n'ai pas vu ta question là-bas. –