Saya hanya berlari
cat /opt/webapplications/Word/readme.log | grep -v 'Apple'
dan saya mendapatkan output pada cli yang saya harapkan, yang merupakan semua baris readme.log
yang tidak mengandung ' Apple
' ...
Selanjutnya saya berlari ...
cat /opt/webapplications/Word/readme.log | grep -v 'Apple' > /opt/webapplications/Word/readme.log
Namun, /opt/webapplications/Word/readme.log
kosong.
Adakah yang bisa menjelaskan kepada saya mengapa ini terjadi, atau cara yang benar yang seharusnya saya lakukan tentang ini?
Jawaban:
Ini terjadi karena hal pertama yang
>
dilakukan adalah membuat file yang ingin ditulisnya - dan jika file sudah ada, isinya akan dihapus. (Juga, tidak perlu sama sekali untuk digunakancat
dalam pernyataan Anda karenagrep
bekerja pada file, tidak hanya pada STDIN.)Cara yang benar untuk melakukan ini adalah dengan menggunakan file sementara baik untuk membaca atau menulis. Begitu juga
atau
akan bekerja.
sumber
Ketika melakukan pengalihan ke file yang sama (
>
), shell dapat membuat / memotong file sebelumcat
perintah dipanggil dan input dibaca (lihat: Mengapa "sort file1> file1" tidak berfungsi? ). Jika Anda ingin memfilter file, lebih baik untuk mengarahkan output ke file yang berbeda, atau menghindari pengalihan sama sekali, misalnya:Cara yang lebih baik dan lebih aman adalah dengan menggunakan editor di tempat yang dirancang untuk operasi semacam itu, misalnya
atau gunakan
ex
(bagian dari Vim):Terkait:
sumber