تخطَّ إلى المحتوى

sd - واجهة سطر أوامر بحث واستبدال بديهية

sd - واجهة سطر أوامر بحث واستبدال بديهية

sd هي أداة بحث واستبدال سطر أوامر سريعة مكتوبة في Rust مصممة لجعل الحالة الشائعة بسيطة. حيث أن sed لديها بناء جملة مشفرة وهروب هش والاختلافات بين BSD/GNU sd تستخدم regex مباشرة (أو السلاسل الحرفية) وإشارات مجموعة التقاط واضحة ($1) وتقرأ/تكتب الملفات بأمان. لـ المهمة اليومية “استبدال X بـ Y عبر هذه الملفات” من الأسهل بكثير الحصول على حق من sed.

التثبيت

المنصةالأمر
Cargo (جميع المنصات)cargo install sd
macOS (Homebrew)brew install sd
Arch Linuxsudo pacman -S sd
Debian/Ubuntusudo apt install sd
Fedorasudo dnf install sd
التحققsd --version

الاستخدام الأساسي

sd تقرأ stdin أو الملفات. الشكل هو sd FIND REPLACE [FILES...].

الأمرالوصف
`echo “hello”sd hello world`
sd 'before' 'after' file.txtاستبدل في ملف (في المكان)
sd 'before' 'after' *.txtاستبدل عبر ملفات عديدة
sd --helpقائمة الخيارات الكاملة

حرفي مقابل Regex

الأمرالسلوك
sd 'a.b' 'X' fileRegex: . يطابق أي شخصية
sd -s 'a.b' 'X' fileسلسلة حرفية (-s/--string-mode)
sd '\d+' 'N' fileRegex فئة الأرقام

استخدم -s عندما يحتوي نص البحث الخاص بك على أحرف regex metacharacters تريد معاملتها حرفيًا — لا هروب يدوي.

مجموعات الالتقاط

sd تستخدم مراجع $1 و $2 البسيطة (أو ${1} عند التجاور بالنص).

# تبديل "First Last" → "Last, First"
echo "Ada Lovelace" | sd '(\w+) (\w+)' '$2, $1'
# → Lovelace, Ada

# أعد صيغة تواريخ YYYY-MM-DD → DD/MM/YYYY
sd '(\d{4})-(\d{2})-(\d{2})' '$3/$2/$1' dates.txt

# استخدم الأقواس عندما تكون المجموعة متبوعة بأرقام/أحرف
echo "v2" | sd 'v(\d)' 'version${1}0'   # → version20

الخيارات الرئيسية

الخيارالوصف
-s, --string-modeالتعامل مع FIND/REPLACE كسلاسل حرفية
-p, --previewعرض الفرق/النتيجة دون كتابة
-f, --flags FLAGSأعلام Regex: i (عدم تمييز الأحرف الكبيرة والصغيرة) و m و s وما إلى ذلك
-n, --max-replacements Nحدد عدد الاستبدالات
stdin/stdoutحذف الملفات للعمل كمصفاة

أعلام Regex (-f)

الرايةالتأثير
iعدم تمييز الأحرف الكبيرة والصغيرة
mمتعدد الأسطر (^/$ تتطابق مع حدود الأسطر)
sالنقطة تطابق الأسطر الجديدة
wمطابقة الكلمات الكاملة
# استبدال عدم تمييز الأحرف الكبيرة والصغيرة
sd -f i 'error' 'ERROR' log.txt

معاينة آمنة

# اعرض ما سيتغيّر قبل ملامسة الملفات
sd -p 'foo' 'bar' src/*.rs

# ثم طبّق
sd 'foo' 'bar' src/*.rs

سير العمل الشائع

# أعد تسمية رمز عبر قاعدة أساس (معاينة أولاً)
sd -p 'oldFunctionName' 'newFunctionName' **/*.js
sd 'oldFunctionName' 'newFunctionName' **/*.js

# شطب المسافات البيضاء الزائدة
sd ' +$' '' file.txt

# استبدل مسار حرفي (وضع string يتجنب هروب النقاط/الشرطات المائلة)
sd -s './old/path.js' './new/path.js' config.json

# استخدام الأنبوب في سلسلة
cat access.log | sd '\d+\.\d+\.\d+\.\d+' '[REDACTED_IP]'

sd مقابل sed

الجانبsdsed
البناء جملةبسيط وحديث regexموجز وتاريخي
مراجع Capture$1 و $2\1 و \2
الوضع الحرفي-s (بدون هروب)الهروب اليدوي
في المكانالافتراضي للملفات-i (BSD/GNU يختلفان)
تعديلات Streaming (sed-style)ركزت على الاستبدالمحرر البث الكامل

sd هو بحث واستبدال مركز؛ بالنسبة لتحرير البث بما يتجاوز الاستبدال sed/awk لا يزال ينطبق. للبحث (وليس الاستبدال) اقرن مع ripgrep.

الموارس