GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Ersetzen Sie jedes Leerzeichen am Ende jeder Zeile durch '_'

Mit GNU sed alle Leerzeichen bei eol durch Unterstrich ersetzen:

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

Perl effizienter nutzen:

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

die nur eine Ersetzung pro Zeile mit abschließendem Leerzeichen durchführen muss, anstatt eine Schleife zu machen.


Mit GNU awk für das 3. Argument zu match() und gensub():

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

Mit jedem 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_

Um auch führende Leerzeichen zu ersetzen, indem Sie die obige gawk-Lösung optimieren:

$ 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. So fügen Sie Text am Anfang jeder Zeile in Vim ein

  2. Zeilenbereich durch Zeilenbereich ersetzen (sed oder andere)?

  3. Die Zeichen jeder Zeile mit Wc zählen?

  4. Wort am Zeilenende mit Sed anhängen?

  5. Das Konzept von 'Hold space' und 'Pattern space' in sed

Ersetzen Sie intelligente Anführungszeichen durch den Linux-Befehl sed

Bearbeiten von Text auf der Kommandozeile mit sed

Bearbeiten von Text in der Befehlszeile mit grep

Zeiterfassung mit Timewarrior auf der Kommandozeile

wc -l zählt NICHT zuletzt in der Datei, wenn es kein Zeilenendezeichen hat

Wie ersetze ich eine Datei im JAR durch die Befehlszeile in Linux?