Dalam skenario saya, saya perlu memeriksa file saya ( XXX.txt
) untuk kata " SPOT ". Akan ada beberapa kata SPOT dalam file.
Sekarang saya perlu skrip untuk menulis 2 baris teratas kata " SPOT " dalam denda teks baru dan beri nama " done.txt
".
CONTOH XXX.txt
dfsfs
clip_id HDX
title Setiap hari
type PROMO
end
clip_id HDQ
title Citra
type SPOT
end
clip_id HDX
title Ri
type PROMO
end
clip_id HDX
title sni
type SPOT
jadi saya perlu menulis " done.txt
" seperti di bawah ini.
clip_id HDQ
title Citra
clip_id HDX
title sni
Mohon saran untuk skrip untuk melakukan ini.
Terimakasih banyak
.bat
solusi CLI murni , Anda bisa mulai dengan membandingkan output darifindstr /n /i "spot" "xxx.txt"
perintah dan darifindstr /n /R $ "xxx.txt"
lalu memperlakukannya dalam duaFOR /F
perintah loop bersarang . Jangan ragu untuk kembali ke sini dan mengedit pertanyaan Anda mengikuti petunjuk komentar @vidaostill.Jawaban:
Inilah solusinya di Powershell, penerus cmd Microsoft:
sumber
Saya sangat merekomendasikan JREPL.BAT - utilitas JScript / batch hybrid yang melakukan penggantian teks ekspresi reguler . JREPL.BAT adalah skrip murni yang berjalan secara native di platform Windows mulai XP dan seterusnya.
Dengan asumsi JREPL.BAT ada di direktori Anda saat ini, atau lebih baik lagi, di suatu tempat dalam PATH Anda, maka, satu baris perintah sederhana secara efisien menyelesaikan masalah Anda:
/M
pilihan multiline memungkinkan pencarian accross baris./JMatch
pilihan cetak hanya string pengganti pertandinganKarena JREPL adalah skrip batch, Anda harus menggunakan CALL JREPL jika Anda menggunakannya dalam skrip lain.
Dokumentasi lengkap tersedia dari baris perintah menggunakan
jrepl /?
. Anda mungkin ingin menggunakanjrepl /?|more
untuk melihat bantuan satu halaman sekaligus. Saya tidak pernah menggunakan LEBIH karena jendela konsol cmd.exe saya dikonfigurasi dengan buffer keluaran besar yang memungkinkan saya untuk menggulir ke atas untuk melihat keluaran sebelumnya.sumber
)
di akhir perintah JREPL yang menyebabkannya gagal. Juga, Anda harus meletakkan PANGGILAN sebelum JREPL jika Anda ingin skrip untuk melanjutkan - jika tidak, perintah PAUSE Anda tidak akan diaktifkan.