অ্যাম্পারস্যান্ড (এবং) দিয়ে সেড ব্যবহার


19

আমি পৃথক পৃথকভাবে পরিবর্তনের পরিবর্তে আমার কাছে থাকা এসএএস ফাইলগুলির মধ্যে নিদর্শনগুলি সন্ধান এবং প্রতিস্থাপনের জন্য সেড ব্যবহার করছি। সমস্যাটি হ'ল আমি ম্যাক্রো ভেরিয়েবলগুলি প্রতিস্থাপনের চেষ্টা করছি এবং যখন আমি অ্যাম্পারস্যান্ড ব্যবহার করি তখন এটি সঠিকভাবে প্রক্রিয়াজাত হয় না।

Here's my code:
sed -ie 's/user=&uid./user=&sysuserid./g' *_table_*.sas

আমি যখনই এই কমান্ডটি চালনা করি তখন মনে হয় মূল পাঠ্য সহ সমস্ত ধরণের মজাদার স্টাফ সংযুক্ত করে do

প্রশ্ন: আমি সেড কমান্ডের সাথে এম্পারস্যান্ডসযুক্ত পাঠ্যকে কীভাবে প্রতিস্থাপন করব?


6
&একটি বিশেষ চরিত্র তাই এটি আরএইচএসে ব্যবহার 's/user=&uid./user=\&sysuserid./g'করার সময় এড়াতে হবে - আপনার ক্ষেত্রে আপনাকে দৌড়াতে হবে যদিও আমি সন্দেহ করি যে আপনাকে 's/user=&uid\./user=\&sysuserid./g'
এলএইচএসের

1
হ্যাঁ, ডানদিকে 'এবং' এর অর্থ মূলত "বামের সাথে মিলে যাওয়া সমস্ত কিছু", সুতরাং এটি '\' দিয়ে পালিয়ে যান। আপনার কেবল উত্তর দেওয়ার চেয়ে উত্তর দেওয়া উচিত।
এডওয়ার্ড ফ্যাল্ক

আমাকে প্রথম পিরিয়ড থেকে বাঁচতে হয়নি ... অন্য কারও মধ্যে মাথা উঁচু করার জন্য কৌতূহল ছিল :)
লুকাসডাভিস 500

উত্তর:


25

&প্রতিস্থাপন পাঠ্যে বিশেষ: এর অর্থ হল "ইনপুটটির পুরো অংশটি যা প্যাটার্নের সাথে মিলেছে", সুতরাং আপনি এখানে যা করছেন তা প্রতিস্থাপন user=&uidXকরে user=user=&uidXsysuserid.। প্রতিস্থাপন পাঠ্যে একটি প্রকৃত অ্যাম্পারস্যান্ড inোকাতে, ব্যবহার করুন \&

অন্য একটি জিনিস যা ভুল দেখায় তা হ'ল .অনুসন্ধানের প্যাটার্নটি কোনও অক্ষরের জন্য দাঁড়িয়েছে (একটি নিউলাইন বাদে), তবে .প্রতিস্থাপন পাঠ্যের শেষে আক্ষরিক বিন্দু। আপনি যদি কেবল আক্ষরিক স্ট্রিং প্রতিস্থাপন করতে চান user=&uid.তবে .ব্যাকস্ল্যাশ দিয়ে সুরক্ষা দিন ।

sed -e 's/user=&uid\./user=\&sysuserid./g'

আপনি যদি কোনও একটি অক্ষর প্রতিস্থাপন করতে চান এবং ফলাফলটিতে এটি সংরক্ষণ করতে চান তবে অক্ষরটিকে একটি গোষ্ঠীতে রাখুন এবং \1সেই গোষ্ঠীটি উল্লেখ করার জন্য প্রতিস্থাপনে ব্যবহার করুন ।

sed -e 's/user=&uid\(.\)/user=\&sysuserid\1/g'

প্রকৃতপক্ষে, মূল পাঠ্য এবং প্রতিস্থাপনের মধ্যে পুনরাবৃত্তি দেওয়া, আপনার যাইহোক গ্রুপগুলি ব্যবহার করা উচিত:

sed -e 's/\(user=&\)u\(id\.\)/\1sysuser\2/g'

অর্থাত্ "এর মধ্যে এবং এর uদ্বারা প্রতিস্থাপন করুন "।sysuseruser=&id.


আপনি গ্রুপ ব্যাখ্যা করতে পারেন?
lucasdavis500

2
@ lucasdavis500 একটি গ্রুপ প্যাটার্নের একটি অংশ চিহ্নিত করে। এটি ব্যাকস্ল্যাশ-প্রথম বন্ধনী দ্বারা সীমিত। উদাহরণস্বরূপ \(user=&\)এমন একটি প্যাটার্ন যা ম্যাচ user&স্ট্রিংকে একটি গোষ্ঠী হিসাবে মেলা এবং সঞ্চয় করে (গ্রুপ পর্বের 1 কারণ এটি প্যাটার্নে প্রথম গ্রুপ)। তারপরে \1প্রতিস্থাপনে গ্রুপ 1 নম্বর
স্টোরের

আপনি কি বোঝাতে চান (ব্যবহারকারীর = &) ব্যবহারকারী = &, ব্যবহারকারী এবং না?
lucasdavis500

@ lucasdavis500 আমি আপনার মন্তব্য বুঝতে পারছি না। =নিয়মিত প্রকাশ এবং প্রতিস্থাপন পাঠ্যের অক্ষরটি নিজের জন্য দাঁড়িয়ে থাকে, সুতরাং user=&কেবল মেলে user=&এবং user=&প্রতিস্থাপন পাঠ্যের user=ফলস্বরূপ রেজেক্সের সাথে মিলিত লাইনের অংশটি অনুসরণ করে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
@ lucasdavis500 =চরিত্রটির কোনও বিশেষ অর্থ নেই। user=&প্রতিস্থাপন পাঠ্যে user=মূল মিলের পাঠ্য উত্পন্ন হয়। user=\&প্রতিস্থাপন পাঠ্যে উত্পাদিত হয়user=&
গিলস 'অশুভ হওয়া বন্ধ করুন'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.