Saya tidak tahu dari pertanyaan Anda di mana dalam nama file karakter baris baru bisa, jadi saya berasumsi mereka bisa berada di mana saja. Ini membuat pencocokan lebih menantang.
Solusi paling sederhana mungkin dengan menghapus semua baris baru dari input sebelum menghapus nama file yang tidak diinginkan.
Saya membuat skrip ini:
#!/usr/bin/perl
$filename = "filelist.txt";
open(FILE, $filename) or die "Cant open $filename\n";
# Undefine the record separator, so that the entire file will be read into a single string
# instead of an array with records separated by newlines
local $/ = undef;
$lines = <FILE>;
close(FILE);
print "Before\n------\n";
print $lines;
# Remove all newlines
$lines =~ s/\n+//g;
# Remove all "textClipping" files
$lines =~ s/\/Volumes\/[^ ]*.textClipping//g;
# Turn multiple consecutive spaces into single spaces
$lines =~ s/ +/ /g;
print "After\n-----\n";
print "$lines\n";
dan berikan contoh Anda sebagai filelist.txt:
/Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/fi
le.textClipping /Volumes/folder/folder/file.doc
yang memberikan hasil ini:
Before
------
/Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/fi
le.textClipping /Volumes/folder/folder/file.doc
After
-----
/Volumes/folder/folder/file.doc /Volumes/folder/folder/file.doc /Volumes/folder/folder/file.doc
Akhirnya, saya pikir Anda harus sangat berhati-hati menggunakan pola yang Anda sarankan dalam pertanyaan Anda:
/Volumes/.*.textClipping
sejak . akan menangkap karakter apa pun kecuali baris baru, tetapi termasuk spasi. Saya menjalankan pola itu pada input ini seperti yang disarankan oleh pertanyaan Anda:
/Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/file.doc /Volumes/folder/folder/file.textClipping /Volumes/folder/folder/fi
le.textClipping /Volumes/folder/folder/file.doc
dan dapatkan hasil ini, yang menurut saya bukan yang Anda inginkan:
/Volumes/folder/folder/fi
le.textClipping /Volumes/folder/folder/file.doc
Edit : Anda baru saja memposting Jawaban untuk pertanyaan Anda sendiri di mana Anda jatuh ke dalam perangkap ini lagi, tetapi saya tidak memiliki Reputasi yang cukup untuk memposting komentar di atasnya. Dari pada /Volumes/.*\n*.textClipping/g
(yang akan cocok dengan spasi, dan dengan demikian berpotensi menghilangkan lebih dari satu nama file sekaligus) Saya sangat menyarankan Anda mempertimbangkannya /Volumes/[^ ]*\n*.textClipping/g
; itu [^ ]*
akan cocok dengan semuanya kecuali spasi.