J'ai un fichier ASCII avec la structure suivante:
file1.png otherfile1.png
file2.png otherfile2.png
file3.png otherfile3.png
...
Je veux remplacer .png
par .mat
, mais uniquement pour la deuxième colonne. Le résultat devrait être comme ceci:
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
...
Comment je fais ça dans Bash?
Eh bien, si c'est la fin de la ligne ...
$ sed 's/\.png$/.mat/' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
s/old/new/
rechercher et remplacer\.
point littéral (sans l'échappement, il ne correspond à aucun caractère)$
fin de ligneOu pour spécifier explicitement la deuxième colonne, vous pouvez utiliser un chemin awk
.
$ awk 'gsub(".png", ".mat", $2)' file
file1.png otherfile1.mat
file2.png otherfile2.mat
file3.png otherfile3.mat
gsub(old, new, where)
rechercher et remplacer$2
deuxième colonneVous pouvez remplacer toutes les .png
chaînes directement à la fin d'une ligne dans INPUTFILE
comme ceci:
sed 's/\.png$/.mat/' INPUTFILE
La commande ci-dessus ne modifiera pas INPUTFILE
mais imprimera uniquement la version modifiée sur le terminal.
Pour éditer directement le fichier en place, ajoutez l'indicateur -i
à sed
(ou -i.bak
pour stocker une sauvegarde du fichier d'origine):
sed -i 's/\.png$/.mat/' INPUTFILE