অবৈধ কমান্ড কোড।, সময়কাল অব্যাহতি সত্ত্বেও, সেড ব্যবহার করে


187

কোনও বর্তমান ক্লায়েন্টের জন্য সিভিএস ব্যবহার করতে বাধ্য করা হচ্ছে এবং দূরবর্তী রেপোর জন্য ঠিকানা পরিবর্তন করা হয়েছে। আমার স্থানীয় কোডে দূরবর্তী ঠিকানাটি পরিবর্তন করতে আমি খুঁজে পাবার একমাত্র উপায় হ'ল পুনরাবৃত্তি অনুসন্ধান এবং প্রতিস্থাপন।

যাইহোক, সেড কমান্ডের সাথে আমি কাজ করার আশা করব:

find ./ -type f -exec sed -i "s/192.168.20.1/new.domain.com/" {} \;

আমি প্রতিটি ফাইলের জন্য একটি ত্রুটি পেয়েছি:

sed: 1: ".//file/path ...": invalid command code .

আমি সেড ম্যাচ / রিপ্লেসমেন্টে পিরিয়ডগুলি এড়িয়ে যাওয়ার চেষ্টা করেছি তবে এটি কোনও সমাধান করে না।

উত্তর:


475

আপনি যদি কোনও ওএস এক্স এ থাকেন তবে সম্ভবত সেড কমান্ডের সাথে কোনও সম্পর্ক নেই। এর ওএসএক্স সংস্করণ sed, -iবিকল্প কোন আশা extensionযুক্তি তাই আপনার কমান্ড আসলে যেমন পার্স করা হয় extensionযুক্তি এবং ফাইল পাথ কমান্ড কোড হিসেবে ব্যাখ্যা করা হয়।

-eসুস্পষ্টভাবে যুক্তি যুক্ত করার এবং যুক্তি ''হিসাবে দেওয়ার চেষ্টা করুন -i:

find ./ -type f -exec sed -i '' -e "s/192.168.20.1/new.domain.com/" {} \;

এই দেখুন ।


41
যদি আপনি 10 মিনিট ব্যয় করে আমি পার্থক্যটি সন্ধান করি তবে এটি বিকল্প বিকল্পটি রয়েছে
acheron55

9
এই প্রশ্নটিRE error: illegal byte sequence ম্যাকোস-এ উত্তর দেয় ।
জোনাস ভাইথেরিন

11
আমি -i এর প্যারামিটার হিসাবে একটি ফাঁকা স্ট্রিং '' ব্যবহার করেছি এবং এটি কাজ করেছেsed -i '' 's/blah/xx/g'
পিয়ের হিউস্টন

25
আমার জন্য, যোগ -eপর -iপ্রণীত sedএই ভাবে ব্যাকআপ আমার সব ফাইল: "foo.txt" -> "foo.txt-ই"। স্পষ্টতই আমি যা চেয়েছিলাম তা হ'ল -i '', অর্থাৎ পরিবর্তিত ফাইলগুলি ব্যাকআপ করবেন না।
mdup

3
আমার জন্য একই সমস্যা। এর সাথে -i -eমিলিত হওয়ার findফলে অনেকগুলি ফাইলের সমাপ্তি ঘটে -e-e-e-e-e-e-e
Aspyct

39

আপনি কেবল একটি যুক্তি সরবরাহ করতে ভুলে গেছেন -i। শুধু পরিবর্তন -iকরতে -i ''

অবশ্যই এর অর্থ আপনি চাইছেন না যে আপনার ফাইলগুলি ব্যাক আপ করা উচিত; অন্যথায় আপনার পছন্দসই এক্সটেনশন সরবরাহ করুন -i .bak


5

ওএস এক্স-তে কোনও কিছুই গরিব বিল্টিন সেডকে পর্যাপ্ত হয়ে উঠতে সহায়তা করে না। সমাধানটি হ'ল:

brew install gnu-sed

এবং তারপরে সেডের পরিবর্তে জিসিড ব্যবহার করুন, যা কেবল প্রত্যাশা অনুযায়ী কাজ করবে।


1
এই উত্তরের জন্য আপনাকে ধন্যবাদ, যা আমার পক্ষে দুর্দান্ত কাজ করেছে! লিনাক্স এবং ম্যাক উভয় ক্ষেত্রেই কাজ করা, আমি দুটি ঘনিষ্ঠভাবে সম্পর্কিতগুলির মধ্যে ত্রৈমাসিকের পার্থক্য শেখার চেয়ে কোনও পরিচিত সরঞ্জামটিতে অ্যাক্সেস পছন্দ করব।
স্টিফেন শ্যাঙ্ক

3

সম্ভবত আপনার নতুন ডোমেন রয়েছে /? যদি তাই হয়, বিভাজক ছাড়া অন্য ব্যবহার করার চেষ্টা করুন /মধ্যে sedযেমন #, ,ইত্যাদি

find ./ -type f -exec sed -i 's#192.168.20.1#new.domain.com#' {} \;

s///পরিবর্তনশীল প্রতিস্থাপন বা অন্য কোনও অপ্রত্যাশিত আচরণ এড়াতে ডাবল উদ্ধৃতি না দিয়ে একক উদ্ধৃতিতে আবদ্ধ হওয়াও ভাল হবে

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