Saya memiliki daftar nilai yang dikembalikan kepada saya dan semuanya berakhir dengan | seperti di bawah ini:
testdata1-old |
testdata |
test2-old|
Saya ingin menghapus semua baris yang mengandung -old. Regex apa yang bisa saya gunakan?
Saya memiliki daftar nilai yang dikembalikan kepada saya dan semuanya berakhir dengan | seperti di bawah ini:
testdata1-old |
testdata |
test2-old|
Saya ingin menghapus semua baris yang mengandung -old. Regex apa yang bisa saya gunakan?
Jawaban:
Saya pikir Anda memiliki kesalahpahaman tentang ekspresi reguler. Pada dasarnya mereka menjawab pertanyaan "apakah teks ini terlihat seperti pola khusus ini?" Ada banyak alat yang menggunakan ekspresi reguler untuk memanipulasi teks sed atau grep, dan saya pikir Anda membingungkan keduanya.
Yang perlu Anda lakukan adalah membentuk ekspresi reguler yang cocok dengan teks yang ingin Anda filter. Misalnya, ekspresi yang Anda cari adalah ^.*-old\|$, dan filter garis menggunakan sesuatu seperti ini.
foreach line in input_file
if regex.matches(line, "^.*-old\|$") then
continue
else
print line
line untuk itu di else klausa alih-alih mencetak.
Yang Anda butuhkan adalah
grep -v -E '^. * - old \ | $' input_file & gt; berkas keluaran
atau apa yang harus bekerja sama:
egrep -v '^. * - old \ | $' input_file & gt; berkas keluaran
Sekarang, bagian yang sulit adalah menemukan versi windows grep atau egrep yang berjalan dari cmd.exe atau Powershell.
negative lokahead mungkin bekerja, tergantung pada mesin regex Anda.