انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


ارائه ۲۴٫۱۰ اوبونتو منتشر شد 🎉

نویسنده موضوع: جایگزینی متن  (دفعات بازدید: 1350 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
جایگزینی متن
« : 18 اسفند 1392، 02:38 ب‌ظ »
سلام دوستان
من یه کد (یا برنامه ) میخواهم که توی همه فایل موجود در پوشه، اگر یک عبارت خاص وجود داشت ، اون رو پاک کنه.
اگر دوستان عزیز کسی میتونه یه همچین کدی رو بنویسه ممنون میشم بهم کمک کنه.
پیشاپیش ممنون
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین vandu

  • Hero Member
  • *
  • ارسال: 741
  • جنسیت : پسر
پاسخ : جایگزینی متن
« پاسخ #1 : 18 اسفند 1392، 03:54 ب‌ظ »
مثلا برای پاک کردن رشته test در همه فایل‌ها این دستور رو در پوشه مورد نظر اجرا کنید:
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'اینم توضیحش در explainshell : توضیح فرمان
فرامین رو حتما قبل از اجرا مطالعه و تست کنید.
Nothing is particularly hard if you divide it into small jobs

Henry Ford

آفلاین hamidrezakp

  • Sr. Member
  • *
  • ارسال: 432
  • جنسیت : پسر
  • Life is Good With GNU/Linux
    • Hamidrezakp Web Site
پاسخ : جایگزینی متن
« پاسخ #2 : 18 اسفند 1392، 06:54 ب‌ظ »
مثلا برای پاک کردن رشته test در همه فایل‌ها این دستور رو در پوشه مورد نظر اجرا کنید:
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'اینم توضیحش در explainshell : توضیح فرمان
فرامین رو حتما قبل از اجرا مطالعه و تست کنید.

ممنون ولی این اررور رو میده :

sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'

اینم کدی که من زدم :
grep -irlZ '<link rel="stylesheet" type="text/css" href="http://forum.ubuntu.ir/Themes/ubun
tu-ir-theme/css/main.css?fin203" />' ./ | xargs -0 sed -i 's/<link rel="stylesheet" type="text/css" href="http://forum.ubuntu.ir/Themes/ubuntu-ir-theme/css/main.css?fin20
3" />//g'
HamidRezaKP.ir
Any fool can write code that a computer can understand. Good programmers write code that humans can understand.

آفلاین سعید رسولی

  • ilius, saeedgnu
  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1543
  • جنسیت : پسر
پاسخ : جایگزینی متن
« پاسخ #3 : 18 اسفند 1392، 07:33 ب‌ظ »
ممنون ولی این اررور رو میده :

sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'
sed: -e expression #1, char 54: unknown option to `s'
به سینتکس دستور sed دقت کن، عبارت‌ها رو با علامت اسلش محصور کرده! یعنی خود اون دو تا عبارت نباید اسلش داشته باشه (وگرنه چطوری تشخیص بده چی رو باید با چی جایگزین کنه). یعنی باید اسلش‌های اون آدرس رو اصطلاحاً escape کنی و قبلش بک‌اسلش \ بذاری.
البته توی grep هم احتمالاً باید بعضی کاراکترها رو escape کنی. نوشتن این جور دستورها سخته، باید چند بار آزمون و خطا کنی تا درست از آب در بیاد. (البته عبارتی که توی grep می‌نویسی لزوماً نباید کامل باشه)
« آخرین ویرایش: 18 اسفند 1392، 07:37 ب‌ظ توسط سعید رسولی »

آفلاین محسن صفری

  • Jr. Member
  • *
  • ارسال: 47
  • جنسیت : پسر
    • صفری آنلاین
پاسخ : جایگزینی متن
« پاسخ #4 : 18 اسفند 1392، 10:08 ب‌ظ »
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'فکر می کنم قسمت اول دستور یعنی grep اضافه باشه .

sed -i 's/test//g' *
اگه در چنین مواقعی چند خط از  ورودی و چند خط از خروجی که نیاز دارید ببینید  رو هم توی سوال ارسال کنید ، می شه بهتر پاسخ داد .

آفلاین vandu

  • Hero Member
  • *
  • ارسال: 741
  • جنسیت : پسر
پاسخ : جایگزینی متن
« پاسخ #5 : 18 اسفند 1392، 10:40 ب‌ظ »
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'فکر می کنم قسمت اول دستور یعنی grep اضافه باشه .

sed -i 's/test//g' *
اگه در چنین مواقعی چند خط از  ورودی و چند خط از خروجی که نیاز دارید ببینید  رو هم توی سوال ارسال کنید ، می شه بهتر پاسخ داد .
درسته. حق با جناب صفری هست. من متوجه نبودم که برای sed هم میشه pattern تعریف کرد و از خروجی grep براش استفاده کردم. ممنون از اصلاحی که انجام دادید. :)
Nothing is particularly hard if you divide it into small jobs

Henry Ford