উত্তর:
ওএস এক্স বিএসডি এবং জিএনইউ সরঞ্জামগুলির মিশ্রণ ব্যবহার করে, তাই সর্বদা ডকুমেন্টেশন পরীক্ষা করে নিন (যদিও আমার কাছে এটি ছিল less
যা ওএস এক্স ম্যানপেজের সাথেও মেনে নেই):
সেড -i
ব্যাকআপগুলির জন্য এক্সটেনশন হিসাবে যুক্তির পরে নেয় । একটি খালি স্ট্রিং সরবরাহ করুন (-i ''
কোনও ব্যাকআপ না দেওয়ার জন্য করুন।
নিম্নলিখিতগুলি করা উচিত:
LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +
-type f
শুধু ভাল অনুশীলন; সেড অভিযোগ করবে যদি আপনি এটি কোনও ডিরেক্টরি বা আরও কিছু দেন।
-exec
উপর অগ্রাধিকার দেওয়া হয় xargs
; আপনার -print0
কোনও কিছুই বা বিরক্ত করার দরকার নেই। {} +
শেষ মানে যে find
পরিবর্তে নামক কমান্ডের এক উদাহরণ হিসেবে বলা যায় আর্গুমেন্ট হিসাবে সমস্ত ফলাফল যোগ হবে, প্রতিটি ফলাফলের জন্য এটি পুনরায় চলছে। (ওএস দ্বারা অনুমোদিত সর্বাধিক সংখ্যক কমান্ড-লাইন আর্গুমেন্ট লঙ্ঘন করা হলে একটি ব্যতিক্রম হয়; সেক্ষেত্রে find
একাধিক উদাহরণ চলবে))
%
অক্ষর: sed "s%localhost/site%blah/blah%"
। আরেকটি বিকল্প বিভাজক ব্যাকস্ল্যাশ-অব্যাহতি হল: sed "s/localhost\/site/blah\/blah/"
।
illegal byte sequence
ত্রুটি হচ্ছে? যদি তাই হয়, চেষ্টা করুন LC_ALL=C find . -type f -name '*.txt' -exec sed -i '' s/this/that/ {} +
:, এটি আমার পক্ষে কাজ করেছিল।
/g
জন্য কেবল একটি ocurreny প্রতিস্থাপন করা হবে, একাধিক অর্থের জন্য যেমনLC_ALL=C find . -type f -exec sed -i '' s/search/replace/g {} +
ম্যাকের জন্য আরও অনুরূপ পন্থাটি হ'ল:
find . -name '*.txt' -print0 | xargs -0 sed -i "" "s/form/forms/g"
find . -name '*.php' -print0 | xargs -0 sed -i "" "s/easyform/form360/g"
বিকল্প সমাধান হিসাবে, আমি ম্যাক ওএসএক্স 10.7.5 এ এটি ব্যবহার করছি
grep -ilr 'old-word' * | xargs -I@ sed -i '' 's/old-word/new-word/g' @
ক্রেডিট এতে যায়: টড সিজারের উত্তর
ওএসএক্সে উপরের কোনওটিই কাজ করে না।
নিম্নলিখিতগুলি করুন:
perl -pi -w -e 's/SEARCH_FOR/REPLACE_WITH/g;' *.txt
এমন একটি সংস্করণ যা লিনাক্স এবং ম্যাক ওএস এক্স উভয়ে কাজ করে (এতে -e
স্যুইচ যুক্ত করে sed
):
export LC_CTYPE=C LANG=C
find . -name '*.txt' -print0 | xargs -0 sed -i -e 's/this/that/g'
export LC_CTYPE=C && export LANG=C
আমি যখনই এই কমান্ডটি টাইপ করি তখনই আমি সর্বদা এটিটিকে হোস আপ করে দেখি, বা কোনও পতাকা ভুলে যাই। আমি তেলানুবের উত্তরের ভিত্তিতে গিথুব-এ একটি গিস্ট তৈরি করেছি যা বর্তমান ডিরেক্টরি থেকে বিশ্বব্যাপী খুঁজে পেতে পারে। এটি ম্যাক ওএসএক্স নির্দিষ্ট।
https://gist.github.com/nateflink/9056302
এটি দুর্দান্ত কারণ এখন আমি টার্মিনালটি খোলার পরে কপি করুন:
কার্ল-এস https://gist.github.com/nateflink/9056302/raw/findreplaceosx.sh | bash -s "Find-a-url.com" "প্রতিস্থাপন-a-url.com"
আপনি কিছু অদ্ভুত বাইট সিকোয়েন্স ত্রুটি পেতে পারেন, তাই এখানে পুরো কোডটি রয়েছে:
#!/bin/bash
#By Nate Flink
#Invoke on the terminal like this
#curl -s https://gist.github.com/nateflink/9056302/raw/findreplaceosx.sh | bash -s "find-a-url.com" "replace-a-url.com"
if [ -z "$1" ] || [ -z "$2" ]; then
echo "Usage: ./$0 [find string] [replace string]"
exit 1
fi
FIND=$1
REPLACE=$2
#needed for byte sequence error in ascii to utf conversion on OSX
export LC_CTYPE=C;
export LANG=C;
#sed -i "" is needed by the osx version of sed (instead of sed -i)
find . -type f -exec sed -i "" "s|${FIND}|${REPLACE}|g" {} +
exit 0
আপনি যদি একটি zsh টার্মিনাল ব্যবহার করে থাকেন তবে আপনি ওয়াইল্ডকার্ড যাদুটি ব্যবহার করতে পারবেন:
sed -i "" "s/search/high-replace/g" *.txt
আমি এই ফর্ম্যাটটি ব্যবহার করেছিলাম - তবে ... আমি পেয়েছি যে আমাকে খুব অদ্ভুত বলে মনে হয়েছে এমন প্রতিটি প্রকৃতপক্ষে পরিবর্তন আনতে এটি পেতে আমাকে তিন বা তার বেশি বার চালাতে হয়েছিল। এটি একবার চালানোতে প্রতিটি ফাইলে কিছু পরিবর্তন হবে তবে সমস্ত নয়। দু'-চারবার ঠিক একই স্ট্রিং চালানো সমস্ত দৃষ্টান্ত ধরে ফেলবে।
find . -type f -name '*.txt' -exec sed -i '' s/thistext/newtext/ {} +
g
শেষে একটি প্রয়োজন , অন্যথায় এটি কেবল thistext
একটি লাইনের প্রথম উপস্থিতিটি প্রতিস্থাপন করে । সুতরাং আপনার রেজেক্সটি হওয়া উচিতs/thistext/newtext/g
https://bitbucket.org/masonicboom/serp হ'ল ইউটিলিটি (অর্থাত্ ক্রস-প্ল্যাটফর্ম), যা ওএসএক্স-এ পরীক্ষিত হয়, যা প্রদত্ত ডিরেক্টরিতে ফাইলগুলিতে পাঠ্যের জন্য পুনরাবৃত্ত অনুসন্ধান এবং প্রতিস্থাপন করে এবং প্রতিটি প্রতিস্থাপনের বিষয়টি নিশ্চিত করে। এটি নতুন, তাই বগিও হতে পারে।
ব্যবহারের মতো দেখাচ্ছে:
$ ls test
a d d2 z
$ cat test/z
hi
$ ./serp --root test --search hi --replace bye --pattern "*"
test/z: replace hi with bye? (y/[n]) y
$ cat test/z
bye
find . -type f | xargs sed -i '' 's/string1/string2/g'
পড়ুন এখানে আরও তথ্যের জন্য।
ওএসএক্স-এ কমান্ডটি ঠিক একইরকম হওয়া উচিত যেমন এটি ইউনিক্সের মতো সুন্দর ইউআই এর অধীনে।
-print0
যোগ করা find
পতাকা এবং -0
করতে xargs
পতাকা।
-exec sed -i s/this/that/g {} \+
পরিবর্তে-print
xargs
স্থান-সীমাবদ্ধ "./jacobus" কে ফাইল হিসাবে পাস করার জন্য sed
এবং তারপরে "R.txt" দিয়ে দেখতে পাবেন might যার কোনটিরই অস্তিত্ব নেই।
"এর পরিবর্তে কেবল PWD বলতে পারি।"
apple.stackexchange.com
এটি সম্ভবত লিনাক্স বা সমস্ত ডেভসের জন্য যথেষ্ট জেনারিক না হওয়ায় সরে যাওয়া উচিত ।