مزيل الأسطر المكررة

احذف الأسطر المكررة من النص مع الإبقاء على الأسطر الفريدة فقط

جرب مثالاً

أسطر الإدخال

الأسطر الفريدة

يعمل محليًا · آمن للصق الأسرار
ستظهر الأسطر الفريدة هنا…

ما هي إزالة الأسطر المكررة؟

إزالة الأسطر المكررة هي عملية مسح كتلة نصية سطراً بسطر والاحتفاظ بأول ظهور لكل سطر فريد فقط. عند إزالة الأسطر المكررة أونلاين، تُقسّم الأداة النص عند أحرف السطر الجديد، وتتتبع الأسطر التي ظهرت مسبقاً باستخدام بنية بيانات قائمة على التجزئة (مثل Set)، وتخرج فقط الأسطر التي لم تُرَ من قبل. يُحافَظ على الترتيب الأصلي للأسطر.

يُعدّ سطران متطابقَين عندما يتطابقان تماماً حرفاً بحرف. غير أن البيانات الواقعية نادراً ما تتوافق مع المطابقة التامة. فالمسافات البادئة أو الزائدة، وتفاوت حالة الأحرف، والأحرف غير المرئية كالجداولة أو رجوع الحرف، كلها قد تجعل أسطراً تبدو متطابقة تُعامَل على أنها فريدة. لذلك توفر معظم أدوات إزالة التكرار خيارات للمقارنة غير الحساسة لحالة الأحرف وحذف المسافات قبل المقارنة.

إزالة التكرار عملية مستقلة عن الفرز. أمر Unix الخاص sort -u يفرز الأسطر أبجدياً ثم يزيل التكرارات المتجاورة، مما يغيّر ترتيب الأسطر. إذا كنت بحاجة للحفاظ على الترتيب الأصلي، فأنت تحتاج إلى نهج المجموعة المُشاهَدة (seen-set): تمر عبر الأسطر بالتسلسل، تضيف الشكل المعياري لكل سطر إلى المجموعة، وتتخطى أي سطر تكون مفتاحه موجوداً بالفعل. تستخدم هذه الأداة نهج المجموعة المُشاهَدة، فتبقى التكرارات الأولى في مواضعها الأصلية.

لماذا تستخدم مزيل التكرار هذا؟

الصق نصك، اختر خيارات المقارنة، وشاهد النتيجة خالية من التكرارات فوراً. لا إعداد لسطر الأوامر، ولا كتابة للتعبيرات النمطية، ولا رفع للملفات.

إزالة تكرار فورية
تتجدد النتائج أثناء الكتابة أو اللصق. بدّل بين خيارات حساسية حالة الأحرف وحذف المسافات لترى كيف تؤثر الخيارات المختلفة على المخرجات دون الحاجة إلى إعادة التشغيل.
🔒
المعالجة بخصوصية تامة
تجري جميع عمليات إزالة التكرار في متصفحك باستخدام JavaScript. نصك يبقى على جهازك ولا يُرفع إلى أي خادم أو يُسجَّل في أي مكان.
🎯
مطابقة قابلة للتخصيص
فعّل وضع عدم الحساسية لحالة الأحرف لمعاملة "Apple" و"apple" كسطر واحد. شغّل خيار حذف المسافات لتجاهل المسافات البادئة والزائدة أثناء المقارنة.
📋
لا حساب مطلوب
افتح الصفحة وابدأ إزالة التكرار. لا تسجيل، لا إضافة للمتصفح، لا تثبيت تطبيق. يعمل على أي جهاز بمتصفح حديث.

حالات استخدام مزيل الأسطر المكررة

تطوير الواجهة الأمامية
نظّف قوائم أصناف CSS، وأزل تصريحات الاستيراد المكررة، أو أزل تكرار مفاتيح ترجمة i18n. إزالة التكرارات قبل الإيداع تمنع تضخم الحزم وتقلل تعارضات الدمج.
هندسة الخادم
أزل التكرارات من ملفات requirements.txt أو Gemfile أو قوائم تبعيات package.json بعد دمج الفروع. أزل الإدخالات المكررة من قوائم السماح والحظر أو جداول التوجيه.
DevOps والبنية التحتية
نظّف الإدخالات المكررة من ملفات .env أو قوائم المضيفين أو ConfigMaps في Kubernetes. متغيرات البيئة المكررة تتسبب في تجاوز صامت للقيم، ورصدها قبل النشر يتجنب أخطاء الإعداد التي يصعب تتبعها.
ضمان الجودة وأتمتة الاختبارات
أزل معرفات حالات الاختبار المكررة من بيانات تشغيل الاختبار، أو التأكيدات المكررة في مجموعات الاختبار المولّدة. أزل تكرار رسائل الخطأ من مخرجات السجل للحصول على المجموعة الفريدة من الإخفاقات.
هندسة البيانات
احذف الصفوف المكررة من تصدير CSV أو نتائج استعلامات SQL الملصوقة كنص. نظّف قوائم البريد الإلكتروني، وقوائم معرفات المستخدمين، أو قوائم العلامات قبل استيرادها إلى قاعدة بيانات أو خط أنابيب معالجة.
الطلاب والمتعلمون
أزل الإدخالات المكررة من قوائم المفردات، وسطور قائمة المراجع، أو ملاحظات الدراسة. الصق محتوى من مصادر متعددة واحصل على قائمة نظيفة وفريدة دون الحاجة إلى تثبيت جدول بيانات.

مقارنة طرق إزالة التكرار

توجد عدة طرق لإزالة الأسطر المكررة، لكل منها مزايا وعيوب مختلفة من حيث الحفاظ على الترتيب واستخدام الذاكرة والدقة.

الطريقةكيف تعملترتيب المخرجاتأين تُستخدم
SetHash-based, O(1) lookupUnorderedJavaScript Set, Python set()
Sorted + scanSort then skip adjacentSorted outputUnix sort -u, C++ std::unique
Seen-set + listTrack seen, preserve orderOriginal orderThis tool, Python dict.fromkeys()
Bloom filterProbabilistic membershipMay miss someLarge-scale pipelines, Redis
SQL DISTINCTDatabase-level dedupQuery-dependentSELECT DISTINCT col FROM table

الحساسية لحالة الأحرف ومعالجة المسافات

يتحكم خياران في كيفية تحديد الأداة لكون سطرين متكررَين. إدراك متى تستخدم كل خيار يمنع كلاً من الإيجابيات الكاذبة (معاملة أسطر مختلفة كتكرارات) والسلبيات الكاذبة (إغفال أسطر يجب أن تتطابق).

حساس لحالة الأحرف (الافتراضي: مفعّل)
عند التفعيل، تُعامَل "Apple" و"apple" كسطرين مختلفين. عطّل هذا الخيار عند إزالة تكرارات البيانات المُدخَلة من المستخدم، أو قوائم أسماء النطاقات، أو أي نص يتفاوت فيه استخدام حالة الأحرف رغم تطابق المعنى.
حذف المسافات الزائدة (الافتراضي: مفعّل)
عند التفعيل، تُحذف المسافات والجداولة البادئة والزائدة قبل المقارنة. هذا يرصد الأسطر التي تبدو متطابقة لكنها تختلف بأحرف غير مرئية، وهو أمر شائع في مخرجات الطرفية الملصوقة، وملفات الإعداد ذات المسافة البادئة، وأدوات المحررين.

أمثلة على الكود

أزل الأسطر المكررة برمجياً في JavaScript وPython وGo وسطر الأوامر. كل مثال يُوضح إزالة التكرار مع الحفاظ على الترتيب ويتعامل مع حساسية حالة الأحرف.

JavaScript
const text = `apple
banana
apple
Cherry
banana
cherry`

// Remove exact duplicates, preserve order
const unique = [...new Map(
  text.split('\n').map(line => [line, line])
).values()].join('\n')
// → "apple\nbanana\nCherry\ncherry"

// Case-insensitive deduplication
const seen = new Set()
const ciUnique = text.split('\n').filter(line => {
  const key = line.toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
// → "apple\nbanana\nCherry"

// Trim whitespace before comparing
const trimDedup = text.split('\n').filter(line => {
  const key = line.trim().toLowerCase()
  if (seen.has(key)) return false
  seen.add(key)
  return true
}).join('\n')
Python
text = """apple
banana
apple
Cherry
banana
cherry"""

lines = text.splitlines()

# Remove duplicates, preserve order (Python 3.7+)
unique = list(dict.fromkeys(lines))
# → ['apple', 'banana', 'Cherry', 'cherry']

# Case-insensitive deduplication
seen = set()
ci_unique = []
for line in lines:
    key = line.lower()
    if key not in seen:
        seen.add(key)
        ci_unique.append(line)
# → ['apple', 'banana', 'Cherry']

# With whitespace trimming
seen = set()
trimmed = []
for line in lines:
    key = line.strip().lower()
    if key not in seen:
        seen.add(key)
        trimmed.append(line)
Go
package main

import (
	"fmt"
	"strings"
)

func removeDuplicates(text string) string {
	lines := strings.Split(text, "\n")
	seen := make(map[string]bool)
	result := make([]string, 0, len(lines))

	for _, line := range lines {
		if !seen[line] {
			seen[line] = true
			result = append(result, line)
		}
	}
	return strings.Join(result, "\n")
}

func main() {
	text := "apple\nbanana\napple\ncherry\nbanana"
	fmt.Println(removeDuplicates(text))
	// → apple\nbanana\ncherry
}
CLI (bash)
# Remove duplicates (sorts output — does not preserve order)
sort -u file.txt

# Remove duplicates while preserving original order
awk '!seen[$0]++' file.txt

# Case-insensitive dedup, preserve order
awk 'BEGIN{IGNORECASE=1} !seen[tolower($0)]++' file.txt

# Trim whitespace then dedup
sed 's/^[[:space:]]*//;s/[[:space:]]*$//' file.txt | awk '!seen[$0]++'

# Count duplicates before removing
sort file.txt | uniq -c | sort -rn

الأسئلة الشائعة

ما الفرق بين إزالة التكرارات واستخدام sort -u؟
يقوم الأمر sort -u أولاً بترتيب جميع الأسطر أبجدياً ثم إزالة التكرارات المتجاورة. هذا يغيّر الترتيب الأصلي للأسطر. أما نهج المجموعة المُشاهَدة، الذي تستخدمه هذه الأداة، فيمر عبر الأسطر بالتسلسل ويتخطى أي سطر ظهر سابقاً، مع الحفاظ على التسلسل الأصلي. استخدم sort -u عندما تريد مخرجاً مرتباً وفريداً في آنٍ معاً. استخدم نهج المجموعة المُشاهَدة عندما يكون الترتيب مهماً.
هل يُرسَل نصي إلى خادم عند إزالة التكرارات؟
لا. تجري جميع عمليات المعالجة في متصفحك باستخدام JavaScript. لا يغادر النص جهازك أبداً. يمكنك التحقق من ذلك بفتح لوحة DevTools Network في متصفحك والتأكد من عدم إرسال أي طلبات عند لصق النص وتبديل الخيارات.
كم سطراً تستطيع هذه الأداة معالجته؟
تعمل الأداة بكفاءة مع عشرات الآلاف من الأسطر. يتمتع Set في JavaScript بوقت بحث متوسط O(1)، لذا تستغرق إزالة تكرارات 100,000 سطر أقل من 100 ميلي ثانية على أجهزة حديثة. للملفات الأكبر من بضعة ميغابايت، استخدم السطر الواحد awk '!seen[$0]++' في سطر الأوامر، الذي يمر عبر الملف دون تحميله بالكامل في الذاكرة.
كيف تعمل إزالة التكرار غير الحساسة لحالة الأحرف؟
عند إيقاف تشغيل الحساسية لحالة الأحرف، يُحوَّل كل سطر إلى أحرف صغيرة قبل مقارنته بمجموعة الأسطر المُشاهَدة. يُحتفَظ بالسطر الأول بحالة أحرفه الأصلية في المخرجات. لذلك إذا كان إدخالك يحتوي على "Apple" في السطر 1 و"apple" في السطر 5، يُحتفَظ بـ "Apple" ويُحذف "apple".
هل يمكنني إزالة التكرارات والفرز في نفس الوقت؟
تزيل هذه الأداة التكرارات دون تغيير ترتيب الأسطر. للحصول على مخرجات مرتبة وفريدة، استخدم أولاً أداة فارز الأسطر في نفس الفئة لفرز نصك، ثم الصق النتيجة المرتبة هنا لإزالة أي تكرارات متبقية. بديلاً عن ذلك، استخدم sort -u في سطر الأوامر للحصول على حل في خطوة واحدة.
ماذا يحدث مع الأسطر الفارغة والأسطر التي تحتوي على مسافات فقط؟
تُعامَل الأسطر الفارغة مثل أي سطر آخر. إذا كان نصك يحتوي على ثلاثة أسطر فارغة، يُحتفَظ بالأول فقط. عند تفعيل خيار حذف المسافات، تُعامَل الأسطر التي تحتوي على مسافات أو جداولة فقط على أنها سلاسل فارغة قبل المقارنة، فتُعدّ جميعها تكراراً للسطر الفارغ الأول أو السطر الذي يحتوي على مسافات فقط.
كيف أزيل التكرارات من ملف CSV بعمود محدد؟
تقارن هذه الأداة الأسطر الكاملة لا الأعمدة الفردية. لإزالة تكرارات CSV بعمود محدد، استخدم awk مع محدد الحقول: awk -F',' '!seen[$2]++' file.csv يحذف الصفوف التي تحتوي على قيم مكررة في العمود الثاني. في Python، استخدم pandas: df.drop_duplicates(subset=['column_name']). لبيانات SQL، استخدم SELECT DISTINCT أو GROUP BY على العمود المستهدف.