ডিরেক্টরি এবং উপ ডিরেক্টরিতে সেড দিয়ে সন্ধান করুন এবং প্রতিস্থাপন করুন


244

আমি আমার সাইটের মূলের সমস্ত ফাইলগুলিতে 'আপেল' এর সমস্ত উপস্থিতি 'কমলা' দিয়ে খুঁজে পেতে এবং প্রতিস্থাপন করতে এই কমান্ডটি চালাচ্ছি:

find ./ -exec sed -i 's/apple/orange/g' {} \;

কিন্তু এটি উপ ডিরেক্টরি মাধ্যমে যায় না।

এই আদেশে কী ভুল?

এখানে আউটপুট কিছু লাইন আছে find ./:

./index.php
./header.php
./fpd
./fpd/font
./fpd/font/desktop.ini
./fpd/font/courier.php
./fpd/font/symbol.php

আপনি চালাতে find ./এবং কিছু নমুনা আউটপুট পোস্ট করতে পারেন ? এবং ডিরেক্টরি স্ট্রুকিউশন দয়া করে। সম্পাদনা করুন: ধন্যবাদ!
জ্যাকব

এইচএম আপনার সন্ধানটি সঠিক, সাবডিয়ারদের সাথে আমার জন্য কাজ করে।
ইয়াকুব

1
আপনি কীভাবে জানবেন যে এটি উপ-ডিরেক্টরি প্রক্রিয়া করে না?
কার্পেট

কারণ এটি এই ত্রুটিগুলি দেয়: সেড: সম্পাদনা করতে পারে না ./fpd: একটি নিয়মিত ফাইল নয়: সম্পাদনা করতে পারে না ./fpd/font: একটি নিয়মিত ফাইল নয়: সম্পাদনা করতে পারেনি। একটি নিয়মিত নয়
এইচডি।

ওহ ... আমি আপেলের জন্য গ্রেপ করেছি এবং কিছুই পাইনি y এঁরা সব প্রতিস্থাপন করা হয়েছিল। ;) ধন্যবাদ . তুমি আমার চোখ খোলে !!!
এইচডি

উত্তর:


421

ডিরেক্টরিতে ডিরেক্টরি পাঠানো এড়ানোর জন্য আপনার সন্ধানটি দেখতে এমন হওয়া উচিত:

find ./ -type f -exec sed -i -e 's/apple/orange/g' {} \;

19
এই কাজটি করতে আপনাকে পরিবর্তন sed -i 's/apple/orange/g'করতে sed -i '' 's/apple/orange/g'হতে পারে।
পৌলমনিকো

7
-iএকটি যুক্তি নেয়: অস্থায়ী ফাইলটি সংরক্ষণ করতে ব্যবহৃত এক্সটেনশনটি। জিএনইউ সেডে, দেখে মনে হচ্ছে -iএটির এবং তার তর্কগুলির মধ্যে কোনও স্থান নেই , তবে বিএসডি সেডে রয়েছে… তাই বিএসডি -i '' 's/foo/bar/'জিএনইউ এর সমতুল্য -i 's/foo/bar/
পৌলমনিকো

20
আসলে যুক্ত -eকরা ম্যাক ওএসে কাজ করে না। touch a b c d eঅনুসৃত দ্বারা কমান্ড উপরে একটি ডিরেক্টরি ভালো তালিকা তৈরী: a a-e b b-e c c-e d d-e e e-e
পৌলমনিকো

6
ম্যাক অপারেটিং সিস্টেম, এই উত্তর stackoverflow.com/questions/19242275/...RE error: illegal byte sequence
kakoma

3
ফিশ শেল ব্যবহারকারীদের জন্য, খালি ধনুর্বন্ধনী উদ্ধৃতি নিশ্চিত করুন '{}', কারণ মাছ উদ্ধৃত না হলে খালি ধনুর্বন্ধকে স্বয়ংক্রিয়ভাবে প্রসারিত করে।
কেভিন চেরেপস্কি

84

বৃহত্তর গুলি ও কাজের জন্য গ্রেপ এবং জার্গস ব্যবহার করা আরও ভাল এবং দ্রুত, সুতরাং, উদাহরণস্বরূপ;

grep -rl 'apples' /dir_to_search_under | xargs sed -i 's/apples/oranges/g'

20
এই উত্তরের জন্য ধন্যবাদ, এটি খুব সহায়ক ছিল! যদি গিট রিপোজিটরিতে থাকে তবে এটি আরও দ্রুতগতিতে ব্যবহার করা হয়git grep -l 'apples' | xargs sed -i 's/apples/oranges/g'
21

4

এটি আমার পক্ষে কাজ করেছে:

find ./ -type f -exec sed -i '' 's#NEEDLE#REPLACEMENT#' *.php {} \;

আসল প্রশ্ন *। পিএফপি ফাইলগুলিতে সীমাবদ্ধ করে না, সেখানে একটি .ini একও রয়েছে
10:58

অব্যক্ত *.phpসত্যই ভুল; আপনি কেবল ভাগ্যবান হয়ে উঠলেন যে এটি সূচনা ডিরেক্টরিতে প্রসারিত হয়নি কারণ সেখানে কোনও মিলে যাওয়া ফাইল আপনার কাছে ঘটেনি।
ট্রিপলি


1

যেহেতু ম্যাকওএস লোকেরা এটি পড়ছে (যেমনটি করেছি), নিম্নলিখিত কোডটি আমার জন্য কাজ করেছে (10.14-এ)

egrep -rl '<pattern>' <dir> | xargs -I@ sed -i '' 's/<arg1>/<arg2>/g' @

অন্য সমস্ত উত্তর ব্যবহার করে -iএবং -eম্যাকোজে কাজ করে না।

উৎস


0

আমি মনে করি আমরা এটি এক লাইনের সাধারণ কমান্ড দিয়ে করতে পারি

for i in `grep -rl eth0 . 2> /dev/null`; do sed -i ‘s/eth0/eth1/’ $i; done

এই পৃষ্ঠায় দেখুন


-6

লিনাক্স-এ:

sed -i 's/textSerch/textReplace/g' namefile

যদি "সেড" কাজ না করে চেষ্টা করুন:

perl -i -pe 's/textSerch/textReplace/g' namefile

4
তিনি উপ ডিরেক্টরিতে সমস্ত ফাইল খুঁজে পেতে চান যে স্ট্রিং থাকে এবং প্রতিস্থাপন করে, কেবল একটি
ফাইলই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.