GNU/Linux >> Linux Esercitazione >  >> Linux

Sostituisci ogni carattere di spazio bianco alla fine di ogni riga con '_'

Con GNU sed, sostituendo tutti gli spazi in eol con underscore:

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

Più efficiente da usare perl:

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

che deve eseguire solo una sostituzione per riga con spazi bianchi finali, invece di eseguire cicli.


Con GNU awk per il 3° argomento match() e gensub():

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

Con qualsiasi 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_

Per sostituire anche gli spazi vuoti iniziali modificando la soluzione gawk sopra:

$ 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. Sostituisci le virgolette intelligenti con il comando sed di Linux

  2. Ordina con l'ordinamento dalla riga di comando

  3. Come inserire del testo all'inizio di ogni riga in Vim

  4. ^M alla fine di ogni riga in vim

  5. Il concetto di 'Spazio di attesa' e 'Spazio del modello' in sed

Manipolazione del testo dalla riga di comando con grep

Tracciare il tempo con Timewarrior alla riga di comando

Aggiungere la parola alla fine della riga con Sed?

Sostituire tutte le nuove righe nello spazio tranne l'ultima?

Vai all'inizio o alla fine del file in Vim [Suggerimento rapido]

Come sostituire un file in jar con la riga di comando in Linux?