GNU/Linux >> Znalost Linux >  >> Linux

Nahraďte každý znak prázdného místa na konci každého řádku '_'

S GNU sed nahrazením všech mezer v eol podtržítkem:

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

Efektivnější použití perlu:

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

který musí provést pouze jednu substituci na řádek s koncovými mezerami namísto smyčkování.


S GNU awk pro 3. arg to match() a gensub():

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

S jakýmkoliv 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_

Chcete-li také nahradit přední mezery vyladěním výše uvedeného řešení:

$ 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. Multi-tasking na příkazovém řádku s screenie

  2. Přidání slova na konec řádku se Sedem?

  3. Nahradit všechny nové řádky mezerníkem kromě posledního?

  1. ^M na konci každého řádku ve vim

  2. Koncept 'Hold space' a 'Pattern space' v sed

  3. Jak nahradím jednoduché uvozovky jiným znakem v sed?

  1. wc -l NEpočítá poslední soubor, pokud nemá znak konce řádku

  2. Jak nahradit soubor v jar příkazovým řádkem v linuxu?

  3. Nahraďte MAC adresu UUID