Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 awk '$1 ~ /^abcd/{ $2=$2"fr" } { print } ' Fichier.txt
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 awk '$1 ~ /^abcd/{ $2=$2"fr" } { print } ' Fichier.txt
Et avec un peu de chance, il va encore s'apercevoir que des fichiers ont déjà été modifiés à la main et donc il ne faudra rajouter le ".fr" que s'il n'a pas déjà été rajouté...![]()
Magique
et si on veut par exemple exclure les colonnes qui contiennent déjà ce "fr" à la fin( comme la première ligne par exemple)? comment faire?
j'ai essayé le " !s ", mais j'étais perdu
Bonjour,
Si des lignes ont déjà été modifiées, la commande awk change juste un peu:
Edit: ".fr" à contrôler sur le deuxième champ, merci disedorgue
Code : Sélectionner tout - Visualiser dans une fenêtre à part awk '$1 ~ /^abcd/ && ! $2 ~ /\.fr$/ {$2=$2 ".fr"} {print}' Fichier.txt
Il faut contrôler le .fr sur le deuxième champs pas le premier
Qui si colle pour le sed ???![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ cat brol abcd bbbb-fr @cccc abcd bbbb @cccc abcd eeee @cccc xaee bbbb @cccc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ sed '/^abcd/{/[^\t]*\t[^\t]*fr/b;s/[^\t]*\t[^\t]*/&-fr/}' brol abcd bbbb-fr @cccc abcd bbbb-fr @cccc abcd eeee-fr @cccc xaee bbbb @cccc![]()
Il n'y a rien à faire, je trouve que awk est plus lisible mais c'est un bel exercice
Allez, je suis taquin:
et ce n'est pas les "\t" dans le echo...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 echo -e 'abcd\tfrbb\t@cccc' | sed '/^abcd/{/[^\t]*\t[^\t]*fr/b;s/[^\t]*\t[^\t]*/&-fr/}' abcd frbb @cccc
une qui fonctionne (à priori):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ echo -e 'abcd\tfrbb\t@cccc' | sed '/^abcd/{/[^\t]*\t[^\t]*-fr\t/!s/\([^\t]*\t[^\t]*\)\t/\1-fr\t/}' abcd frbb-fr @cccc
Sinon, juste un chtit sed '/^abcd/{/[^\t]*\t[^\t]*fr\b/b;s/[^\t]*\t[^\t]*/&-fr/}' devrait suffireune qui fonctionne (à priori):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ echo -e 'abcd\tfrbb\t@cccc' | sed '/^abcd/{/[^\t]*\t[^\t]*-fr\t/!s/\([^\t]*\t[^\t]*\)\t/\1-fr\t/}' abcd frbb-fr @cccc![]()
manque juste leBon, allez, maintenant une version pure builtin bash:
Code : Sélectionner tout - Visualiser dans une fenêtre à part /[^\t]*\t[^\t]*-fr\b/
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ cat plip abcd bbbb-fr @cccc abcd bbbb @cccc abcd eeee @cccc xaee bbbb @cccc abcd frddfr @cccc
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $ while read a b c ; do case $a in abcd) case $b in *-fr) echo -e "$a\t$b\t$c" ;; *) echo -e "$a\t$b-fr\t$c" ;; esac ;; *) echo -e "$a\t$b\t$c" ;; esac; done <plip abcd bbbb-fr @cccc abcd bbbb-fr @cccc abcd eeee-fr @cccc xaee bbbb @cccc abcd frddfr-fr @cccc![]()
Partager