Manipulation de fichiers

Table des matières

  1. Compression
  2. Changement d’encodage
  3. Remplacement d’une chaîne
    1. Changement de CVS
    2. Changement du carriage return

Compression

Il peut être intéressant parfois de ne prendre un compte que certains fichiers lors de la création d’une archive zip.

La commande suivante permet de créer un fichier .zip (nommé sources.zip) contenant tous les fichiers ayant l’extension .java de manière récursive à partir du répertoire courant.

$ zip -r sources.zip . -i *.java

Changement d’encodage

Certains OS utilisent par défaut l’encodage de fichier UTF-8 (cas de GNU/linux) alors que d’autres utilisent l’encodage ISO-8859-1 (également appelée Latin-1). Cet encodage différent des caractères pose parfois des problèmes lorsque l’on souhaite réutiliser des fichiers créés sous un autre système.

Pour continuer à manipuler ces fichiers, deux commandes peuvent être utiles: file et iconv.

  • La première permet de vérifier l’encodage:
    Syntaxe:
    file [file_name]
    Exemple:
    $ file liste.txt
    liste.txt: UTF-8 Unicode HTML document text, with CRLF line terminators
  • La seconde permet de convertir l’encodage:
    Syntaxe:
    iconv -f [encoding] -t [encoding] < [source] > [destination]
    Exemple:
    $ iconv -f ISO-8859-1 -t UTF-8 < [source] > [destination]
    ou
    $ iconv --from-code=UTF-8 --to-code=ISO-8859-1 < [source] > [destination]
Note

Pour convertir l’encodage d’un fichier provenant d’un iSeries (encodage EBCDIC), il faut utiliser le jeu de caractères IBM-1047.

Pour ce genre de fichiers, il est également possible de les convertir à la volée ainsi le contenu de ce dernier sera affiché dans la console. Si vous désirez les éditer par la suite, il faudra rediriger la sortie dans un fichier.

$ cat <fichier_ebcdic> | dd conv=ascii      # ebcdic vers ascii
ou
$ cat <fichier_ascii> | dd conv=ebcdic      # ascii vers ebcdic
Warning N’utilisez pas le même nom pour la source et la destination au risque de perdre votre fichier!

Remplacement d’une chaîne

Cette commande remplace toutes les occurences de la chaîne de caractères recherchée dans le fichier par une nouvelle chaîne.

Syntaxe:
perl -pi -e 's/[old_string]/[new_string]/g;' [file_name]
Exemple:
$ perl -pi -e 's/hello/goodbye/g;' monTexte.txt

Une autre solution consiste à utiliser l’éditeur non interactif sed. Cet éditeur permet d’appliquer un certain nombres de commandes sur un fichier puis d’en afficher le résultat sur la sortie standard. Le fichier d’origine n’est de ce fait pas modifié.

Syntaxe:
sed 's/[old_string]/[new_string]/g;' [file_name]
Exemple:
$ sed 's/hello/goodbye/g;' monTexte.txt

Il est néanmoins possible de modifier le contenu du fichier d’origine en ajoutant l’option -i.

La commande ci-après recherche toutes les lignes contenant le mot nombre puis remplace le mot hello par goodbye si ce dernier est présent sur la ligne.

Exemple:
$ sed -i '/nombre/ s/hello/goodbye/g;' monTexte.txt

Changement de CVS

La commande ci-dessous permet de changer le serveur cvs d’un projet.

Syntaxe:
find -name Root | xargs perl -pi -e 's/[old_string]/[new_string]/g'; \
find -name Root.bak | xargs rm

Changement du carriage return

GNU\Linux et Windows n’encode malheureusement pas les fins de ligne de la même manière.

La commande suivante liste tous les fichiers (-type f) du répertoire courant (-maxdepth 1) et remplace tous les caractères de fin de ligne; \r\n (Windows) par \n (GNU\Linux).

Syntaxe:
find . -maxdepth 1 -type f | xargs perl -pi -e 's/\r\n/\n/g'; ls *.bak | xargs rm
This entry was posted in Bash, GNU/Linux and tagged , . Bookmark the permalink. Follow any comments here with the RSS feed for this post.

Leave a Reply

Your email address will not be published. Required fields are marked *