আমি যখন স্বেচ্ছাসেবীর সন্ধান এবং প্রতিস্থাপনের জন্য ব্যবহার করি তখন কীভাবে দেখানোর জন্য উদ্ধৃতি পেতে পারি?


0

বর্তমানে আমি স্ট্রিংয়ের প্রথম তিনটি ঘটনার একটি অংশ খুঁজে পেতে এবং প্রতিস্থাপন করতে AWK ব্যবহার করছি। স্ট্রিংটি এ জাতীয় বিন্যাস করা হয় এবং ফাইলে এই স্ট্রিংগুলির অনেকগুলি রয়েছে:

func(tempID="39849235",count='12');

এই লিঙ্কটি ব্যবহার করে , আমি স্ট্রিংয়ের প্রথম তিনটি দৃষ্টান্ত খুঁজে পেতে এবং প্রতিস্থাপন করতে AWK ব্যবহারের একটি পদ্ধতি খুঁজে পেতে সক্ষম হয়েছি। আমার যা করা দরকার তা আমি এটিকে পরিবর্তন করেছি এবং আমার স্ক্রিপ্টের একটি স্নিপেট নীচে রয়েছে:

id=12349876
awk 'BEGIN {matches=0}
     matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID='"$id"'"); matches++ }
     { print $0 }' filName.py >filName.py.changed

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

func(tempID=39849235,count='12');

আমি প্রতিস্থাপন অংশের চারপাশে ডাবল উদ্ধৃতিগুলি সরিয়ে এবং এটিকে কাঠামোগত করার চেষ্টা করেছি tempID="$id", তবে দুর্ভাগ্যক্রমে এটি স্ট্রিং সহ আইডি নম্বরটি প্রতিস্থাপন করে $id

টেম্পিড মানটি সন্ধান এবং প্রতিস্থাপনের কোনও উপায় আছে এবং উদ্ধৃতি সহ মানটিকে ঘিরে রাখুন দয়া করে আমাকে জানান। আমি AWK এর সাথে আটকে নেই, সুতরাং সেডের মতো অন্য কোনও ইউটিলিটি সহ অন্য কোনও পদ্ধতিও ভাল কাজ করবে।

উত্তর:


0

আপনার কমান্ডে শেল দ্বারা ব্যাখ্যা করা এবং পৃথক করা উদ্ধৃতি রয়েছে, সেখানে উদ্ধৃতিগুলি ব্যাখ্যা করা এবং ছড়িয়ে দেওয়া হবে awk, তারপরে আপনার উদ্ধৃতিগুলি দরকার যা টিকে থাকবে। আপনার এগুলি পালানো উচিত:

id=12349876
awk 'BEGIN {matches=0}
 matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID=\"'"$id"'\""); matches++ }
 { print $0 }' filName.py >filName.py.changed              # ^^  here ^^

ব্যাখ্যা। আপনার মূল আদেশটি এর মতো

awk 'BEGIN {matches=0} matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID='"$id"'"); matches++ } { print $0 }'
#   ^ these quotes are seen by the shell and don't get to awk                      ^^   ^^                            ^
#     these quotes get to awk and serve their purpose there      ^      ^  ^              ^
#     this variable is expanded by the shell and gets to awk as its value            ^^^

এবং এটি হ'ল উন্নত আদেশ:

awk 'BEGIN {matches=0} matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID=\"'"$id"'\""); matches++ } { print $0 }'
#   ^ these quotes are seen by the shell and don't get to awk                        ^^   ^^                              ^
#     these quotes get to awk and serve their purpose there      ^      ^  ^                  ^
#     these quotes will appear in the output thanks to being escaped                ^        ^
#     this variable is expanded by the shell and gets to awk as its value              ^^^

উদ্ধৃতি উন্মত্ততা হ্রাস করতে আপনি -vভেরিয়েবলটি পাস করার বিকল্পটি ব্যবহার করতে পারেন awk। তারপরে কেবল শেলটি প্রসারিত করতে আপনার একক উদ্ধৃতি মিড সিকোয়েন্সটি বন্ধ এবং পুনরায় খোলার দরকার নেই $id। পরিবর্তে অনাবৃত (যেমন awkএটি দেখায়) নিজের idদ্বারা প্রসারিত হয় awk। আমাদের যে ডাবল উক্তি যুক্ত করতে হবে তা আগের মতো পালাতে হবে:

id=12349876
awk -v id="$id" 'BEGIN {matches=0}
 matches < 3 && /.*tempID.*/ { sub(/tempID="[0-9]+"/,"tempID=\""id"\""); matches++ }
 { print $0 }' filName.py >filName.py.changed

আপনাকে অনেক ধন্যবাদ! অ্যাডাব্লু-ভি ঠিক আমার যা প্রয়োজন ছিল!
AndreasKralj

0

আপনি যা করতে চান তা অর্জন করতে আপনার এগুলি করতে হবে:

ডাবল উদ্ধৃতি জন্য:

  • এডাব্লুকে: "অন্যান্য ডাবল উদ্ধৃতিগুলির মধ্যে ডাবল উক্তিগুলি রক্ষা করুন।
    $1 $2=> foobar
    $1" __"$2"__"=> foo __bar__
    $1" \""$2"\""=>foo "bar"

একক উদ্ধৃতি জন্য:

  • শেল: '…'এর '…'ভিতরে আরও একটি সেট ব্যবহার করে আপনার পুরো অ্যাডক স্ক্রিপ্টটি প্রস্থান করুন ।
    'escaped 'unescaped' escaped'
    '$LINUX '$OSTYPE' $CPUTYPE'=>$LINUX linux-gnu $CPUTYPE

  • শেল: 'আপনি আক্ষরিকভাবে মুদ্রণ করতে চান এড়িয়ে চলুন।
    'apostrophe that'\''s literal'=>apostrophe that's literal

উদাহরণ স্বরূপ

echo foo bar | awk '{print "\""$1"\" '\''"$2"'\''"}'
"foo" 'bar'

আর একটি উপায় হ'ল ডাবল কোটের ভিতরে অষ্টাল বা হেক্সাডেসিমাল কোডগুলি রয়েছেecho foo bar | awk '{print "\x22"$1"\042","\x27"$2"\047"}'
পাওলো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.