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'