GNU/Linux >> Belajar Linux >  >> Linux

Menggunakan sed untuk mengganti antara pola tertentu

Itu dimungkinkan dengan GNU sed. Pilih salah satu dari dua formulir ini berdasarkan keserakahan penggantinya.

sed 's|=.*,|\L&|' file
sed 's|=[^,]*,|\L&|' file

Seperti yang dinyatakan manual, "\L mengubah pengganti menjadi huruf kecil hingga \U atau \E ditemukan". & adalah teks yang cocok dengan regex.

Saya telah memodifikasi file sampel untuk menunjukkan bahwa Anda harus dengan bijak memilih antara =.*, geedy dan =[^,]*, yang tidak serakah regex:

$ cat file
SOMENAME=WOODSTOCK,
SOMEOTHERNAME2=JIMMY,WOODSTOCK,FINISH
$ sed 's|=.*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,woodstock,FINISH
$ sed 's|=[^,]*,|\L&|' file
SOMENAME=woodstock,
SOMEOTHERNAME2=jimmy,WOODSTOCK,FINISH

Pada awk yang sesuai dengan POSIX , Anda dapat menggunakan tolower() fungsi

awk -v FS='=' 'BEGIN { OFS = FS } { $2 = tolower($2) }1 ' file

Gunakan mktemp() berfungsi untuk membuat file temp untuk mengarahkan output dari perintah di atas dan kemudian mengarahkan kembali untuk menyimpan di tempat. Atau gunakan GNU awk>=4.1 dengan -i inplace

Varian lain dari versi yang sesuai dengan POSIX, menggunakan match() fungsinya adalah untuk melakukan

awk 'match($0, /=([^,]*),/) { str = substr($0, RSTART+1, RLENGTH-2); sub(str, tolower(str)) }1'

Linux
  1. Menggunakan sed untuk menemukan dan mengganti file teks di Linux

  2. Menggunakan Sed untuk Mencari &mengganti garis di antara rentang pola

  3. Pencocokan Pola Multiline Menggunakan Sed, Awk Atau Grep?

  1. Ganti Data Antara Kutipan Dalam File?

  2. Menggunakan grep dan sed untuk mencari dan mengganti string

  3. Bagaimana cara menggunakan sed untuk mengganti variabel file konfigurasi?

  1. Bagaimana Cara Mengganti String Dalam File?

  2. Masukkan beberapa baris ke dalam file setelah pola yang ditentukan menggunakan skrip shell

  3. Temukan dan ganti teks dalam file di antara rentang baris menggunakan sed