خانه/وبلاگ/دستورات کاربردی Notepad++: حذف خطوط تکراری، زوج و فرد و ترفندهای رجکس

دستورات کاربردی Notepad++: حذف خطوط تکراری، زوج و فرد و ترفندهای رجکس

نویسنده: دانیال طاهری فر ۷ آبان ۱۴۰۵ ترفندهای متفرقه
دستورات کاربردی Notepad++: حذف خطوط تکراری، زوج و فرد و ترفندهای رجکس

Notepad++ یک ویرایشگر متن رایگان است که با قابلیت Find & Replace و عبارات منظم (RegEx)، کارهای تکراری روی هزاران خط داده را در چند ثانیه انجام می‌دهد: حذف خطوط تکراری، حذف خطوط زوج یا فرد، افزودن متن به ابتدا یا انتهای خطوط، حذف خطوط شامل یک کلمه و ده‌ها کار دیگر. همه‌ی این ترفندها را در این صفحه جمع کرده‌ام.

من از این ترفندها بیشتر برای کارهای سئو و داده استفاده می‌کنم؛ مثل تمیز کردن لیست کلمات کلیدی، آماده کردن لیست آدرس‌ها برای ریدایرکت یا پاک‌سازی خروجی ابزارها. اگر Notepad++ را ندارید، آخرین نسخه را از سایت رسمی دانلود کنید.

قبل از شروع: پنجره‌ی Replace و حالت RegEx

تقریباً همه‌ی دستورهای این صفحه در پنجره‌ی Replace اجرا می‌شوند:

  1. فایل را در Notepad++ باز کنید و کلید Ctrl+H را بزنید.
  2. عبارت جستجو را در Find what و عبارت جایگزین را در Replace with بنویسید.
  3. در بخش Search Mode گزینه‌ی Regular expression را انتخاب کنید.
  4. تیک . matches newline را فقط وقتی بزنید که در توضیح دستور گفته شده.
  5. روی Replace All بزنید.
پنجره‌ی Replace در Notepad++ با حالت Regular expression

قبل از اجرای هر دستور روی داده‌ی مهم، یک نسخه‌ی پشتیبان از فایل بگیرید. Replace All قابل برگشت (Ctrl+Z) است، اما احتیاط ضرر ندارد.

خلاصه‌ی دستورها

کارFind whatReplace withنکته
حذف خطوط تکراری^(.*?)$\s+?^(?=.*^\1$)(خالی)تیک . matches newline روشن
حذف خطوط فرد.+\R(.+)$1تیک . matches newline خاموش
افزودن متن به ابتدای خطوط^متن دلخواه
افزودن متن به انتهای خطوط$متن دلخواه
حذف خطوط شامل یک کلمه^.*کلمه.*\R?(خالی)
حذف خطوط خالی^\s*$\R(خالی)یا Edit › Line Operations
حذف متن بین دو تگ<i>[^<]*</i>(خالی)تگ را با تگ خودتان عوض کنید
تبدیل لیست به متن کاما‌دار\R,برای چسباندن در ابزارها
استخراج دامنه از آدرس^https?://([^/]+).*$$1
حذف پارامترهای آدرس\?.*$(خالی)

حذف خطوط تکراری در Notepad++

فرض کنید یک لیست ایمیل یا کلمه‌ی کلیدی دارید که پر از موارد تکراری است. سه راه دارید:

روش ۱: ابزار داخلی (ساده‌ترین)

در نسخه‌های جدید Notepad++ این قابلیت داخل خود برنامه است: از منوی Edit › Line Operations گزینه‌ی Remove Duplicate Lines را بزنید. اگر فقط می‌خواهید خطوط تکراری پشت‌سرهم حذف شوند، Remove Consecutive Duplicate Lines را انتخاب کنید. برای مرتب‌سازی هم Sort Lines Lexicographically در همین منوست.

روش ۲: با رجکس

  1. Ctrl+H را بزنید و حالت Regular expression را فعال کنید.
  2. تیک . matches newline را بزنید.
  3. در Find what این عبارت را بنویسید و Replace with را خالی بگذارید:
^(.*?)$\s+?^(?=.*^\1$)
  1. Replace All را بزنید. این عبارت هر خطی را که جای دیگری از فایل هم تکرار شده حذف می‌کند و فقط آخرین نسخه‌اش را نگه می‌دارد.
حذف خطوط تکراری با رجکس در پنجره‌ی Replace نوت‌پد++

اگر فقط خطوط تکراری پشت‌سرهم را می‌خواهید حذف کنید، این عبارت سبک‌تر است و تیک . matches newline لازم ندارد: ^(.*\R)\1+ را با $1 جایگزین کنید.

روش ۳: پلاگین TextFX (نسخه‌های قدیمی)

در نسخه‌های قدیمی که منوی Line Operations ندارند، از منوی Plugins › Plugins Admin پلاگین TextFX Characters را نصب کنید. بعد متن را انتخاب کنید و از منوی TextFX › TextFX Tools ابتدا تیک Sort outputs only UNIQUE lines را بزنید و سپس Sort lines case sensitive (یا case insensitive) را انتخاب کنید.

نصب پلاگین TextFX از Plugins Admin در Notepad++

ویدیوی این آموزش را در یوتیوب ببینید.

حذف خطوط زوج یا فرد

وقتی داده‌ها به شکل جفت‌جفت در خطوط پشت‌سرهم آمده‌اند (مثلاً عنوان و توضیح)، گاهی لازم است فقط یکی از آن‌ها بماند.

حذف خطوط فرد: در حالت Regular expression و با تیک خاموش . matches newline:

Find what:    .+\R(.+)
Replace with: $1
تنظیمات پنجره‌ی Replace برای حذف خطوط فرد

حذف خطوط زوج: یک خط خالی به ابتدای فایل اضافه کنید و همان دستور بالا را اجرا کنید؛ با این کار خطوط زوج جای خطوط فرد را می‌گیرند و حذف می‌شوند.

ویدیوی این بخش هم در یوتیوب هست.

افزودن متن به ابتدا یا انتهای همه‌ی خطوط

  • ابتدای خطوط: در Find what علامت ^ و در Replace with متن دلخواه را بنویسید. مثلاً برای اضافه کردن https:// به ابتدای لیست دامنه‌ها.
  • انتهای خطوط: در Find what علامت $ و در Replace with متن دلخواه را بنویسید. مثلاً برای اضافه کردن / به انتهای آدرس‌ها.
افزودن متن به ابتدای همه‌ی خطوط در Notepad++

یک ترفند جایگزین بدون رجکس: با نگه داشتن Alt و کشیدن ماوس، چند خط را به‌صورت ستونی انتخاب کنید و تایپ کنید؛ متن هم‌زمان در همه‌ی خطوط نوشته می‌شود.

حذف خطوطی که یک کلمه‌ی خاص دارند

برای پاک‌سازی یک لیست بزرگ از خطوطی که یک عبارت مشخص دارند (مثلاً کلمات کلیدی نامرتبط):

Find what:    ^.*کلمه.*\R?
Replace with: (خالی)

به جای «کلمه» عبارت خودتان را بنویسید. بخش \R? باعث می‌شود خود خط هم حذف شود و خط خالی باقی نماند.

حذف خطوط شامل یک کلمه‌ی خاص در Notepad++

حذف متن بین دو تگ یا دو عبارت

اگر خروجی یک ابزار تولید محتوا یا اسکرپر پر از بخش‌های اضافه بین دو تگ است، با این الگو پاکشان کنید (تگ i را با تگ یا عبارت خودتان عوض کنید):

Find what:    <i>[^<]*</i>
Replace with: (خالی)
حذف متن بین تگ‌ها با رجکس در Notepad++

ترفندهای سریع دیگر برای کار با داده

  • حذف خطوط خالی: Edit › Line Operations › Remove Empty Lines
  • کوچک یا بزرگ کردن حروف انگلیسی: Edit › Convert Case to
  • حذف فاصله‌های اضافه‌ی ابتدا و انتهای خطوط: Edit › Blank Operations › Trim Leading and Trailing Space
  • تبدیل لیست چندخطی به یک خط با کاما: \R را با , جایگزین کنید.
  • استخراج دامنه از لیست آدرس‌ها: ^https?://([^/]+).*$ را با $1 جایگزین کنید.

کاربردهای این ترفندها در سئو

سؤالات متداول

دستور رجکس کار نمی‌کند؛ مشکل از کجاست؟

اول مطمئن شوید Search Mode روی Regular expression است. بعد وضعیت تیک . matches newline را با توضیح همان دستور مقایسه کنید؛ بیشتر خطاها از همین تیک است.

برای فایل‌های خیلی بزرگ (چند گیگابایتی) چه کنم؟

Notepad++ برای فایل‌های بسیار بزرگ کند می‌شود یا باز نمی‌کند. فایل را به چند بخش تقسیم کنید یا از ابزارهای خط فرمان و ویرایشگرهای مخصوص فایل‌های حجیم استفاده کنید.

این دستورها در فایل‌های فارسی هم کار می‌کنند؟

بله. فقط مطمئن شوید Encoding فایل روی UTF-8 است (منوی Encoding) تا حروف فارسی درست نمایش داده شوند.

ترفند دیگری دارید که اینجا نیست؟

در بخش دیدگاه‌ها بنویسید: توضیح کار، دستور و کاربرد عملی‌اش. ترفندهای مفید را با نام خودتان به همین صفحه اضافه می‌کنم.

مقاله‌های مرتبط

دیدگاه‌ها

2 دیدگاه
  1. الهام

    سلام من کاملا مبتدی هستم و سوالی که میکنم اصلا در حد شما نیست پس پوزش من رو بپذیرید..
    من توی همین نوت پد ایجاد یک دایره رو کدنویسی کردم ولی نمیدونم چ طوری میتونم خروجی کار رو ببینم و اینکه من با css نوشتم با چ پسوندی سیو کنم و کجا ببینم

  2. سیامک

    سلام چطور میشه یه کلمه یا کاراکتر خاص رو در ابتدای هر لاین حذف کرد؟

ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *