একটি পাঠ্য ফাইল থেকে ব্যাকস্ল্যাশগুলি সরান


10

আমার আছে

ইনপুট:

 NISHA =\455  

আউটপুট:

 NISHA = 455

আমি \আউটপুট থেকে অপসারণ করতে চাই । আমি কমান্ডটি ব্যবহার করার চেষ্টা করেছি sed "s/[\]//g" Pকিন্তু এটি কাজ করছে না এবং এটি একটি ত্রুটিটিকে চিহ্নিত করে:

character found after backslash is not meaningful

3
আপনার কাছে একটি নন-পসিক্স বাস্তবায়ন হয়েছে বলে মনে হচ্ছে sed(বা সম্ভবত আপনি এই কমান্ডটি নন-পসিক্স শেল থেকে চালাচ্ছেন?) আপনি প্রয়োজন হবে না sedযদিও, trযথেষ্ট: tr -d '\\' < P
স্টাফেন চেজেলাস

উত্তর:


20

উদাহরণস্বরূপ ফলাফলটি দেখানোর সাথে সাথে আপনি কোনও স্থানকে ব্যাকস্ল্যাশ প্রতিস্থাপন করতে পারেন:

sed 's/\\/ /g'

অথবা আপনি আপনার কোডটিতে প্রদর্শিত হিসাবে এটি সরিয়ে ফেলতে পারেন:

sed 's/\\//g'

বিশেষ অক্ষর

ব্যাকস্ল্যাশ এর বিশেষ অর্থটি বাতিল করতে পলায়নের ক্ষেত্রে সমস্যা রয়েছে are ব্যাকস্ল্যাশ একটি বিশেষ চরিত্র যা শেল এবং নিয়মিত প্রকাশে উভয়ই পালাতে ব্যবহৃত হয়।

শেলের কমান্ড লাইন বা স্ক্রিপ্টে আপনি যে কমান্ডটি টাইপ করেন তা শেল দ্বারা প্রথমে প্রক্রিয়া করা হয় যা অক্ষরের বিশেষ অর্থ এবং তাদের পলায়নকে ব্যাখ্যা করে। ফলস্বরূপ মৃত্যুদন্ড কার্যকর করার কমান্ডে (মত sed) পাস করা হয় যা চরিত্রগুলির নিজস্ব ব্যাখ্যা করে। আপনি যখন কোনও কমান্ড তৈরি করছেন তখন মানসিক পদ্ধতিটি বিপরীত উপায়: প্রথমে রেগেক্সের জন্য পলায়ন যোগ করুন তারপরে শেলের জন্য পলায়ন যুক্ত করুন।

  1. একটি Regex ইন (যেমন কমান্ড ইনপুট sed, grepইত্যাদি) ব্যাকস্ল্যাশ ভালো ব্যাকস্ল্যাশ দ্বারা পলান করা যেতে পারে: \\এবং আপনি সেট অভিব্যক্তি ব্যবহার করতে পারেন [\]যেমন আপনি কারণ ব্যাকস্ল্যাশ তার বিশেষ অর্থ হারায় ব্যবহৃত।

  2. শেল (যেমন bash) তে আপনি ব্যাকস্ল্যাশ করে ব্যাকস্ল্যাশ এড়াতে পারবেন। সুতরাং পরিবর্তে \লিখুন \\। ডাবল উদ্ধৃতিগুলির মধ্যে স্ট্রিংটি যুক্ত করা "ব্যাকস্ল্যাশ আচরণকে আরও জটিল করে তোলে <1> তবে ডাবল ব্যাকস্ল্যাশ এখনও একটি একক ব্যাকস্ল্যাশ তৈরি করবে। একক উদ্ধৃতিগুলির মধ্যে স্ট্রিংটি আবদ্ধ করা 'প্রতিটি অক্ষর ব্যতীত আক্ষরিক হিসাবে বিবেচিত হবে '

আপনি ব্যবহার করতে চান তাহলে উদ্ধৃতি চিহ্ন : আপনাকে নিম্নলিখিত একটি ব্যবহার করতে পারেন
sed "s/\\\\//g"এস্কেপ - \দ্বারা \শেল মধ্যে, এবং প্রত্যেক অব্যাহতি \আবার Regex হবে। প্রকৃতপক্ষে এই ক্ষেত্রে ডাবল উক্তিগুলি প্রয়োজনীয় নয় কারণ প্রতিটি বিশেষ চরিত্র সঠিকভাবে পালিয়ে যায়।
sed "s/[\\]//g"- একটি ব্যাকস্ল্যাশ দ্বারা শেল মধ্যে পালাতে এবং \রেগেক্সে একটি সেট ব্যবহার করুন [ ]
sed "s/[\]//g"- হ্যাঁ, আপনার উদাহরণটি একটি পসিক্স অনুগত পরিবেশে কাজ করা উচিত! ডাবল উদ্ধৃতিগুলির মধ্যে \নিজেকে প্রতিনিধিত্ব করে যতক্ষণ না এটি ডাবল উদ্ধৃতিগুলির প্রসঙ্গে একটি বিশেষ চরিত্রের আগে: $`"\বা একটি নতুন লাইন। দেখে মনে হচ্ছে আপনার ক্ষেত্রে শেল বা sedপোসিক্স মানটি অনুসরণ করে না।

সঙ্গে একক উদ্ধৃতি আপনার কাছে স্ট্রিং হিসেবে আপনি ব্যবহার বা খাটো উপায় ব্যবহার করতে পারেন:
sed 's/[\]//g'
sed 's/\\//g'


6

আপনাকে ব্যাকস্ল্যাশ থেকে বাঁচতে হবে। এটা চেষ্টা কর:

sed 's/\\//g'

3

যদি আপনি সেড সমাধানগুলি না চান তবে নিম্নলিখিত কমান্ডগুলি দিয়ে চেষ্টা করুন:

$ echo "NISHA =\455"| awk -F'\' '{print $1 $2}'
$ echo "NISHA =\455"| tr '\\' ' '
$ echo "NISHA =\455"| tr -d '\\'
$ echo "NISHA =\455"| cut -c 1-7,9-11


1
sed 's/\\//'

একটি স্থান \আগে \মত আপনি সবচেয়ে বিশেষ অক্ষর না।


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