একটি পাঠ্য ফাইলের প্রতিটি লাইনে স্ট্রিংয়ের নবম উপস্থিতি প্রতিস্থাপন করুন


15

আমার কাছে স্পেস ডিলিমিটেড স্ট্রিং (2-5) সহ বড় টেক্সট ফাইল রয়েছে। স্ট্রিংগুলিতে "" "বা" - "থাকতে পারে। আমি পাইপ দিয়ে দ্বিতীয় স্থান বলতে চাইলে প্রতিস্থাপন করতে চাই।

সবচেয়ে ভাল উপায় কি?

সেড ব্যবহার করে আমি এটি সম্পর্কে ভাবছিলাম:

sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt

অন্য কোন / আরও ভাল / সহজ ধারণা?

উত্তর:


22

বিকল্প কমান্ডের শেষে আপনি একটি সংখ্যা যুক্ত করতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত প্রতিটি লাইনের oldস্ট্রিংয়ের সাথে দ্বিতীয় ঘটনাটি প্রতিস্থাপন করবে :newfile

sed 's/old/new/2' file

সুতরাং, আপনার প্রস্তাবিত সমাধানের পরিবর্তে আপনি ব্যবহার করতে পারেন:

sed 's/ /|/2'

আরও তথ্যের জন্য, দেখুন এই সেড টিউটোরিয়াল


2
থেকে sedতথ্য ফাইল: "নোট: POSIX মান নির্দিষ্ট করে না যখন আপনি মিশ্রিত করা কি হবে g' and NUMBER modifiers, and currently there is no widely agreed upon meaning across sed '। বাস্তবায়নের জন্য গনুহ` sed', মিথষ্ক্রিয়া হতে সংজ্ঞায়িত করা হয়: NUMBERth আগে মিলগুলি উপেক্ষা করুন, এবং তারপর মেলে এবং সমস্ত প্রতিস্থাপন ৮ ম থেকে মিলছে ""
পরবর্তী বিজ্ঞপ্তি না দেওয়া পর্যন্ত বিরতি দেওয়া হয়েছে।

তথ্য ফাইল ... আমি তাদের ঘৃণা করি। যাইহোক, আমি অস্পষ্ট অংশটি সরিয়েছি। ভাল মন্তব্য, +1।
মুর্চি 20'10

1
ধন্যবাদ, মুরুচি এবং ডেনিস আমি ভেবেছিলাম যে সেখানে কিছু সরল হতে হবে।
dnkb

টেক্সট ম্যানিপুলেশন নিয়ে আমার প্রতিটি সমস্যা আছে বলে মনে হয়, আমি এটি সমাধান করতে পারি sed। আমি নিশ্চিত না যে আমাকে sedআরও কার্যকর করার জন্য আপনাকে ধন্যবাদ জানানো উচিত , তবে আমি যাই হোক না কেন। ;)
জেমি

1

আপনি কি আপনার সংস্করণ ব্যবহার করে দেখেছেন? এটা কি কাজ করেছিল? কারণ আমি মনে করি এটি মূলত একটি ভাল ধারণা। যদিও আমি কিছুটা আলাদাভাবে করব, যদিও:

sed -re 's/^([^ ]+ +[^ ]+) /\1|/'

এটি কোনও শব্দে কোনও অক্ষর গ্রহণ করবে যা স্থান নয়, এবং প্রথম দুটি শব্দের মধ্যে একাধিক স্পেস গ্রহণ করবে।

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