Di GNU Awk 4.1.0 (dirilis 2013) dan yang lebih baru, ia memiliki opsi pengeditan file "inplace":
[...] Ekstensi "inplace", dibangun menggunakan fasilitas baru, dapat digunakan untuk mensimulasikan GNU "
sed -i
" fitur. [...]
Contoh penggunaan:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Untuk menyimpan cadangan:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
Kecuali jika Anda memiliki GNU awk 4.1.0 atau lebih baru...
Anda tidak akan memiliki opsi seperti -i
sed opsi jadi lakukan:
$ awk '{print $0}' file > tmp && mv tmp file
Catatan:-i
bukan sihir, itu juga membuat file sementara sed
hanya menanganinya untuk Anda.
Pada GNU awk 4.1.0...
GNU awk
menambahkan fungsi ini di versi 4.1.0 (dirilis 10/05/2013) . Ini tidak semudah memberikan -i
opsi seperti yang dijelaskan dalam catatan yang dirilis:
Opsi -i baru (dari xgawk) digunakan untuk memuat file perpustakaan awk. Ini berbeda dari -f karena argumen non-opsi pertama diperlakukan sebagai skrip.
Anda harus menggunakan inplace.awk
yang dibundel sertakan file untuk menjalankan ekstensi dengan benar seperti:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
Variabel INPLACE_SUFFIX
dapat digunakan untuk menentukan ekstensi file cadangan:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Saya senang fitur ini telah ditambahkan tetapi bagi saya, implementasinya tidak terlalu canggung karena kekuatannya berasal dari keringkasan bahasa dan -i inplace
terlalu panjang 8 karakter i.m.o .
Berikut ini tautan ke manual untuk kata resmi.
hanya sedikit retasan yang berhasil
echo "$(awk '{awk code}' file)" > file