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

کمک و پشتیبانی => برنامه‌سازی => نویسنده: hamidrezakp در 18 اسفند 1392، 02:38 ب‌ظ

عنوان: جایگزینی متن
ارسال شده توسط: hamidrezakp در 18 اسفند 1392، 02:38 ب‌ظ
سلام دوستان
من یه کد (یا برنامه ) میخواهم که توی همه فایل موجود در پوشه، اگر یک عبارت خاص وجود داشت ، اون رو پاک کنه.
اگر دوستان عزیز کسی میتونه یه همچین کدی رو بنویسه ممنون میشم بهم کمک کنه.
پیشاپیش ممنون
عنوان: پاسخ : جایگزینی متن
ارسال شده توسط: vandu در 18 اسفند 1392، 03:54 ب‌ظ
مثلا برای پاک کردن رشته test در همه فایل‌ها این دستور رو در پوشه مورد نظر اجرا کنید:
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'اینم توضیحش در explainshell : توضیح فرمان (http://explainshell.com/explain?cmd=grep+-irlZ+%27test%27+.%2F+|+xargs+-0+sed+-i+%27s%2Ftest%2F%2Fg%27)
فرامین رو حتما قبل از اجرا مطالعه و تست کنید.
عنوان: پاسخ : جایگزینی متن
ارسال شده توسط: hamidrezakp در 18 اسفند 1392، 06:54 ب‌ظ
مثلا برای پاک کردن رشته test در همه فایل‌ها این دستور رو در پوشه مورد نظر اجرا کنید:
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'اینم توضیحش در explainshell : توضیح فرمان (http://explainshell.com/explain?cmd=grep+-irlZ+%27test%27+.%2F+|+xargs+-0+sed+-i+%27s%2Ftest%2F%2Fg%27)
فرامین رو حتما قبل از اجرا مطالعه و تست کنید.

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

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'
عنوان: پاسخ : جایگزینی متن
ارسال شده توسط: سعید رسولی در 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، 10:08 ب‌ظ
grep -irlZ 'test' ./ | xargs -0 sed -i 's/test//g'فکر می کنم قسمت اول دستور یعنی grep اضافه باشه .

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

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