কীভাবে একক উদ্ধৃতি থেকে বাঁচতে পারব


111

আমি নিম্নলিখিতটি করতে চাই

awk 'BEGIN {FS=" ";} {printf "'%s' ", $1}'

তবে একক উদ্ধৃতি এইভাবে পালানো কোনও কাজ করে না

awk 'BEGIN {FS=" ";} {printf "\'%s\' ", $1}'

কিভাবে এই কাজ করতে? সাহায্যের জন্য ধন্যবাদ.


বেশ কয়েকটি ভাষা তাদের দু'একটি সারিতে রেখে উদ্ধৃতিগুলি এড়ায়, সম্ভবত এটি চেষ্টা করুন।
জোশুয়াহেলি

আমি 'BEGIN {FS = "";} {প্রিন্টফ ""'% s '' ", $ 1} 'বুদ্ধির চেষ্টা করেছি, তবে একটিও উদ্ধৃতি মুদ্রিত হয়নি।

এই পৃষ্ঠাটি বলছে যে একক-উদ্ধৃত স্ট্রিংয়ে একটি একক উদ্ধৃতি সহ অসম্ভব। হতে পারে আপনাকে ডাবল উদ্ধৃতিতে রূপান্তর করতে হবে।
জোশুয়াহেলি

2
এটি অসম্ভব, তবে দুটি সংলগ্ন একক-উদ্ধৃত শেল স্ট্রিং একসাথে একটি প্যারামিটারে আঠালো। এবং দুইটি একক-উদ্ধৃত শেল স্ট্রিং নন-হোয়াইটস্পেস অক্ষর দ্বারা আটকানো এছাড়াও একটি বড় গ্লোব মধ্যে আঠালো: 'abc'd'ef'হয় abcdef: আক্ষরিক প্লাস dপ্লাস আক্ষরিক। dকোট বাহিরে, এবং আপনি প্রতিস্থাপন করতে পারেন যে dএটা দিয়ে \'করতে 'abc'\''ef'যা মূল্যায়ণ abc'ef
কাজ

উত্তর:


160

এটি সম্ভবত আপনি যা খুঁজছেন:

awk 'BEGIN {FS=" ";} {printf "'\''%s'\'' ", $1}'

এটি হ'ল, '\''আপনি খোলার বন্ধ করার সাথে সাথে 'তারপরে 'পালিয়ে একটি আক্ষরিক মুদ্রণ করুন এবং শেষ পর্যন্ত 'আবার খুলুন ।


48
অজকের সাথে এর কোনও যোগসূত্র নেই। 'চরিত্র খোলার প্রচেষ্টা 'শেল স্ট্রিং আক্ষরিক। শেল আক্ষরিক এটির জন্য ব্যাকস্ল্যাশ পালাতে সহায়তা করে না। ক্রম '\''কৌতুক আছে: এটা একক উদ্ধৃতি আক্ষরিক, নির্দিষ্ট করে উদ্ধৃতি অক্ষর (যে পালাবার ব্যবহার বন্ধ করা হয় এবং তারপর একক উদ্ধৃতি লিটারেল বাইরে সমর্থিত) পুনরায় প্রর্দশিত একটি নতুন একক উদ্ধৃতি আক্ষরিক। একক উদ্ধৃতি পেতে আপনি এটি চার-চরিত্রের পালানোর ক্রম হিসাবে ভাবতে পারেন। :)
কাজ

2
@ স্টিভ: আপনার খুব দরকারী উত্তরের জন্য অনেক ধন্যবাদ। তুমি আমাকে অনেক মাথাব্যথা বাঁচিয়েছ!
জন স্লেজার

4
@ সাইন্ট্যাক্সররআল্ট চাওয়ার জন্য আর্গুমেন্ট প্রস্তুত করার জন্য আপনি যে উদ্ধৃতিগুলি ব্যবহার করছেন তা হ'ল awkকমান্ড লাইন রচনা করতে আপনি যে কমান্ড দোভাষী ব্যবহার করছেন তা নিখুঁতভাবে । '{printf $2}'একটি জন্য কিছু যুক্তি পরিণত পরার execveসিস্টেম কল বা অনুরূপ, যেখানে এটি ঠিক কোন একক উদ্ধৃতি ছাড়া একটি নাল সমাপ্ত সি স্ট্রিং মত দেখাচ্ছে। আওক কখনই উদ্ধৃতিগুলি দেখে না এবং সেডও করে না। আপনি আসলে ব্যবহার ডাবল কোট করতে পারেন, কিন্তু ডবল কোট শেল এর বিস্তার রোধ না $2, তাই আপনি যদি একটি ব্যাকস্ল্যাশ সঙ্গে ডলার চিহ্ন অব্যাহতি এটা আক্ষরিক করতে হবে: "{printf \$2}"
কাজ

4
@ সাইন্ট্যাক্সরর কাস্টম অনুসারে একটি ইন-লাইন অ্যাজক স্ক্রিপ্ট সাধারণত একক উদ্ধৃতি দিয়ে পালানো হয়, কারণ ডাবলির চিহ্ন দ্বারা চিহ্নিত ডাবল উদ্ধৃত স্ট্রিং লিটারালস এবং সংখ্যাযুক্ত ক্ষেত্রের মতো শেকের জন্য বিশেষভাবে লভাসিক উপাদানগুলি এনওএক্স সিনট্যাক্সে থাকে। যদি একটি নিয়মিত এক্সপ্রেশন (বা যাই হোক না কেন) শেল সিনট্যাক্স ধারণ করে, আপনারও যত্নবান হতে হবে। sed -e "s/$FOO/$BAR/"অভিপ্রায়টি আক্ষরিক পাঠ্যের $FOOসাথে প্রতিস্থাপন করা হলে কাজ করবে না $BAR। সবচেয়ে সহজ উপায় হবে sed -e 's/$FOO/$BAR/
কাজ

1
@ সাইন্ট্যাক্সররর আপনি যদি ডাবল উদ্ধৃতিতে অ্যাজকি প্রোগ্রামগুলি আবদ্ধ করেন, তবে আপনি প্রচুর পালানোর মতো ছুটে যাবেন awk "{ print \"abc\", \$1 }"। যখনই ডাবল উদ্ধৃতিটি অর্ক প্রোগ্রামে উপস্থিত হয়, তখন তাকে এড়িয়ে যেতে হবে যাতে এটি শেলের উদ্ধৃতিটি বন্ধ না করে। এবং এটি তুলনা করুন: awk '{print "\\"}'(একটি ব্যাকস্ল্যাশ মুদ্রণ করুন) বনাম এটি ডাবল উদ্ধৃতি সহ যা লাগে: বনাম awk "BEGIN {print \"\\\\\" }"! উভয় উদ্ধৃতি এড়াতে হবে, এবং উভয় পিছনে। শেলটি রূপান্তর \\ করে \ তাই আমাদের \\\\ এনকোড করা দরকার \\
কাজ

76

একটি একক উদ্ধৃতি ব্যবহার করে প্রতিনিধিত্ব করা হয় \x27

পছন্দ করুন

awk 'BEGIN {FS=" ";} {printf "\x27%s\x27 ", $1}'

উৎস


16
+1, তবে যুক্ত করা দরকার: \x27এটি একটি এক্সটেনশন; পজিক আওক কেবল স্বীকৃতি দেয় \047। ( \47অক্টাল ডিজিট অনুসরণ না করলে ঠিক আছে।)
হেমফ্লিট

1
এর পরে আর কোনও নম্বর থাকলে আপনি কীভাবে শেষ করবেন?
জেসন অ্যাকসেলসন

1
জেসন, আপনি দুটি স্ট্রিং আক্ষরিক সম্মত হন: "এএএ \ x27" "1"। অথবা আপনি কেবল অষ্টাল ব্যবহার করেন।
হেমফ্লিট

9
সর্বদা অক্টাল ( \047) ব্যবহার করুন , হেক্স ( \x27) নয়, এস্কেপ কোডগুলি - দেখুন awk.freehell.org/ মুদ্রণসিংহকোয়োট
এড মর্টন

35

অন্য বিকল্পটি হ'ল একক উদ্ধৃতিটিকে একটি এডকে ভেরিয়েবল হিসাবে পাস করা :

awk -v q=\' 'BEGIN {FS=" ";} {printf "%s%s%s ", q, $1, q}'

স্ট্রিং কনটেন্টেশন সহ সহজ উদাহরণ:

# Prints 'test me', *including* the single quotes.
$ awk -v q=\' '{print q $0 q }' <<<'test me'
'test me'

5
এটি স্পষ্ট এবং সংক্ষিপ্ত, বিশেষত আপনার যদি অনেকগুলি উদ্ধৃতি ব্যবহারের প্রয়োজন হয়।
পিটার গ্লাক


4

ছোট স্ক্রিপ্টগুলির জন্য এটি পঠনযোগ্য করে তোলার একটি alচ্ছিক উপায় হ'ল এর মতো একটি চলক ব্যবহার করা:

awk -v fmt="'%s'\n" '{printf fmt, $1}'

আমি এটি এমন এক ক্ষেত্রে পেয়েছি যেখানে আমাকে আউটপুটে একাধিকবার একক-উদ্ধৃতি চরিত্র তৈরি করতে হয়েছিল এবং \ 047 একে সম্পূর্ণ অপঠনযোগ্য করে তুলছে

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