Ketik konten file, pipa beberapa tindakan dan kembalikan hasilnya


1

Apakah ada cara untuk melakukan sesuatu seperti ini:

cat somefile.txt | sort | uniq > somefile.txt

Yaitu saya ingin daftar seluruh file, kemudian pipa beberapa tindakan ke kontennya dan akhirnya mengembalikan hasilnya ke file sumber menimpa sepenuhnya. Untuk saat ini saya melakukannya dengan meletakkan output ke file sementara dan setelah itu memindahkannya ke yang asli. Saya ingin melakukannya dengan cara sederhana seperti memungkinkan perpipaan linux.

Shell ada bashdi Linux dan cmddi Windows jika itu penting.

Jawaban:


2

(menjawab untuk bash)
Tidak. Shell memproses pengalihan pertama, yang kemudian memotong file. Hanya kemudian catmulai, dan itu beroperasi dengan file kosong.

Ada alat yang disebut spongedalam moreutilspaket yang memungkinkan Anda melakukan ini:

cat somefile.txt | sort | uniq | sponge somefile.txt

Perintah ini dapat disederhanakan (menghapus UUOC ):

sort -u somefile.txt | sponge somefile.txt

Tanpa spongeAnda harus menulis ke file temp, dan jika perintah berhasil, timpa file input

tmpfile=$(mktemp)
sort -u somefile.txt > "$tmpfile" && mv "$tmpfile" somefile.txt

1
spongeadalah jawaban umum, tetapi karena sort(tidak seperti kebanyakan utilitas) perlu buffer semua data sebelum mengeluarkan apapun (kecuali untuk -m), untuk kasus khusus ini Anda bisa sort -u -o somefile.txt somefile.txt.
dave_thompson_085

0

Anda dapat menggunakan Vim dalam mode Ex:

ex -sc 'sort u|x' somefile.txt
  1. sort u semacam unik

  2. x Simpan dan tutup

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.