আমি sed
এই প্রশ্নটি পোস্ট করার দীর্ঘ পরে উত্তরটি নিয়ে কাজ করেছি; অন্য কেউ এখনও sed
অবধি ব্যবহার করেন নি এটি এখানে:
sed '$!N;/^\(.*\)\n\1$/d;P;D'
আরও সাধারণ সমস্যা নিয়ে একটু খেলা (তিনটির সেটে লাইন মুছে ফেলার কী? বা চার, বা পাঁচ?) নিম্নলিখিত এক্সটেনসিবল সমাধান সরবরাহ করেছে:
sed -e ':top' -e '$!{/\n/!{N;b top' -e '};};/^\(.*\)\n\1$/d;P;D' temp
তিনটি রেখার অপসারণ প্রসারিত:
sed -e ':top' -e '$!{/\n.*\n/!{N;b top' -e '};};/^\(.*\)\n\1\n\1$/d;P;D' temp
অথবা লাইনগুলির কোয়াড অপসারণ করতে:
sed -e ':top' -e '$!{/\n.*\n.*\n/!{N;b top' -e '};};/^\(.*\)\n\1\n\1\n\1$/d;P;D' temp
sed
সর্বাধিক অন্যান্য বিকল্পগুলির তুলনায় অতিরিক্ত সুবিধা রয়েছে, যা প্রকৃতপক্ষে কোনও স্ট্রিমে পরিচালনা করার ক্ষমতা এবং ডুপ্লিকেটগুলি পরীক্ষা করার জন্য প্রকৃত সংখ্যার লাইনের চেয়ে বেশি মেমরি স্টোরেজ নেই।
কুওনলম মন্তব্যে যেমন উল্লেখ করেছেন , মাল্টি-বাইট অক্ষরযুক্ত লাইনগুলি যথাযথভাবে অপসারণ করতে ব্যর্থতা এড়াতে সিতে লোকাল সেট করা প্রয়োজনীয়। সুতরাং উপরের কমান্ডগুলি হয়ে যায়:
LC_ALL=C sed '$!N;/^\(.*\)\n\1$/d;P;D' temp
LC_ALL=C sed -e ':top' -e '$!{/\n/!{N;b top' -e '};};/^\(.*\)\n\1$/d;P;D' temp
LC_ALL=C sed -e ':top' -e '$!{/\n.*\n/!{N;b top' -e '};};/^\(.*\)\n\1\n\1$/d;P;D' temp
# Etc.
C
, অন্যথায় মাল্টি-বাইট লোকালে, সেই লোকালে অবৈধ অক্ষর কমান্ড ব্যর্থ হওয়ার কারণ হতে পারে।