GNU/Linux >> Belajar Linux >  >> Linux

Ganti setiap karakter spasi putih di akhir setiap baris dengan '_'

Dengan GNU sed, ganti semua spasi di eol dengan garis bawah:

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

Lebih efisien menggunakan perl:

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

yang hanya perlu melakukan satu substitusi per baris dengan spasi putih tambahan, bukan perulangan.


Dengan GNU awk untuk arg ke-3 yang cocok() dan gensub():

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

Dengan 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_

Untuk mengganti blank awal juga dengan men-tweak solusi gawk di atas:

$ 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. Ganti kutipan pintar dengan perintah sed Linux

  2. Multi-Tugas di baris perintah dengan screenie

  3. Cara Menyisipkan Teks di awal setiap baris di Vim

  1. Ganti Rentang Garis Dengan Rentang Garis (sed Atau Lainnya)?

  2. Menghitung Karakter Setiap Baris Dengan Wc?

  3. Ganti Semua Baris Baru Ke Spasi Kecuali Yang Terakhir?

  1. Pergi ke Awal atau Akhir File di Vim [Kiat Singkat]

  2. ^M di akhir setiap baris di vim

  3. Ganti alamat MAC dengan UUID