GNU/Linux >> Tutoriels Linux >  >> Linux

Remplacez chaque caractère d'espace blanc à la fin de chaque ligne par '_'

Avec GNU sed, remplacer tous les espaces à eol par un trait de soulignement :

sed ':x;s/ \( *\)$/_\1/;tx'  

Perl plus efficace :

perl -lpe 's/(\s+)$/"_" x length($1)/e' input.txt

qui n'a qu'à faire une substitution par ligne avec des espaces à la fin, au lieu de boucler.


Avec GNU awk pour le 3ème argument à match() et gensub() :

$ awk 'match($0,/(.*[^ ])(.*)/,a){$0=a[1] gensub(/ /,"_","g",a[2])} 1' file
foo bar_____
 foo bar oof
  line 3a___
  line fo a_

Avec n'importe quel awk :

$ awk 'match($0,/ +$/){tail=substr($0,RSTART,RLENGTH); gsub(/ /,"_",tail); $0=substr($0,1,RSTART-1) tail} 1' file
foo bar_____
 foo bar oof
  line 3a___
  line fo a_

Pour remplacer également les blancs de tête en modifiant la solution gawk ci-dessus :

$ awk 'match($0,/^( *)(.*[^ ])(.*)/,a){$0=gensub(/ /,"_","g",a[1]) a[2] gensub(/ /,"_","g",a[3])} 1' file
foo bar_____
_foo bar oof
__line 3a___
__line fo a_

Linux
  1. Comment insérer du texte au début de chaque ligne dans Vim

  2. Ajouter un mot à la fin de la ligne avec Sed ?

  3. Remplacer toutes les nouvelles lignes par un espace sauf la dernière ?

  4. Aller au début ou à la fin du fichier dans Vim [Quick Tip]

  5. Le concept de 'Hold space' et 'Pattern space' dans sed

Remplacez les guillemets intelligents par la commande Linux sed

Manipulation de texte en ligne de commande avec sed

Manipuler du texte en ligne de commande avec grep

Suivi du temps avec Timewarrior en ligne de commande

Comment remplacer un fichier en jar par une ligne de commande sous Linux ?

Remplacer l'adresse MAC par UUID