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'