Saya ingin menghapus kata ke-5 dari setiap baris dalam sebuah file.
Konten file saat ini:
File is not updated or and will be removed
System will shut down f within 10 seconds
Please save your work 55 or copy to other location
Kindly cooperate with us D
Output yang diharapkan:
File is not updated and will be removed
System will shut down within 10 seconds
Please save your work or copy to other location
Kindly cooperate with us
text-processing
sed
awk
pmaipmui
sumber
sumber
-f
tidak didukung dicut
(GNU) saya setidaknya ..--complement
bendera untuk menyederhanakan hal:cut --complement -d ' ' -f5
. Ingatlah untuk mengarahkan kembali output ke file baru, lalumv
ke yang asli.awk: hapus bidang ke-5
Jika Anda ingin menyimpan file di tempat: /programming//q/16529716/7552
Anda bisa menghapus isi bidang ke-5, tetapi itu meninggalkan 2 pemisah bidang keluaran berturut-turut:
sumber
Dengan POSIX sed:
sumber
_
dan bukan yang lain:blank:
atau dulu:space:
?\(
kelompok tangkap\)
?Glenn menawarkan solusi yang setara dengan
Seperti yang dia dan orang lain tunjukkan, ini
Retasan untuk memperbaiki masalah ketiga adalah
Ini masih akan menyisakan satu atau lebih ruang tambahan di akhir setiap baris yang memuat lima atau lebih sedikit kata. Jika Anda dapat mengidentifikasi kata yang tidak akan pernah muncul di input,
akan menangani bahkan itu (tetapi masih menyisakan masalah 1 dan 2).
sumber
Yang lebih kuat (sed mengambil pola terpanjang mungkin dan pola dengan
*
bisa kehilangan pemisahan atau kata dalam versi pertama) tetapi versi yang sedikit lebih lamasumber
sed 's/[^[:blank:]]*//5'
sed 's/[[:blank:]*[^[:blank:]]*//5'
lebih baik. Poin yang sangat bagus. Saya curiga bahwa sed mengambil masing-masing char sebagai entitas tetapi dibutuhkan pola unbreaked terbesar sebagai entitassed 's/[[:blank:]][^[:blank:]]*//4'
akan menghapus seluruhnya bidang ke-5.sed 's/[[:blank:]][^[:blank:]][^[:blank:]]*//4'
, atau, w / GNU / BSD / toyboxsed
s:sed -E 's/[[:blank:]][^[:blank:]]+//4'
.Perl.
sumber
Kemungkinan lain, dengan asumsi GNU dipotong:
sumber
Menggunakan Perl> 5.10 (dan berhasil mengeluarkan semua baris: 0)): -
sumber