প্রতিটি লাইনের শেষে পাঠ্য যুক্ত করুন


94

আমি লিনাক্স কমান্ড লাইনে আছি এবং আমার সাথে ফাইল আছে

127.0.0.1
128.0.0.0
121.121.33.111

আমি চাই

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

আমার মনে আছে আমার সহকর্মীরা সেটির জন্য সেড ব্যবহার করছিল, তবে সেড ম্যানুয়ালটি পড়ার পরেও কীভাবে কমান্ড লাইনে এটি করা যায় তা পরিষ্কার নয়?


4
দুর্দান্ত প্রশ্ন এবং আপনি এটি কীভাবে ফ্রেম করেছেন তা আমি পছন্দ করি।
অ্যান্টনি রুটলেজ

উত্তর:


145

আপনি এর মতো কিছু ব্যবহার করার চেষ্টা করতে পারেন:

sed -n 's/$/:80/' ips.txt > new-ips.txt

আপনার ফাইলের ফর্ম্যাটটি যেমন আপনি আপনার প্রশ্নে বর্ণনা করেছেন ঠিক তেমন শর্তযুক্ত।

s///প্রতিকল্পন কমান্ড ম্যাচ ( খুঁজে বের করে ) যা আপনার ফাইলের প্রতিটি লাইনের শেষে (ব্যবহার $চরিত্র) এবং তারপর appends ( প্রতিস্থাপন ) :80প্রতিটি লাইনের শেষ। ips.txtফাইলটি আপনার ইনপুট ফাইল ... এবং new-ips.txtআপনার নতুন তৈরি ফাইল ( আপনার পরিবর্তনগুলি চূড়ান্ত ফলাফল। )


এছাড়াও, যদি আপনার কাছে আইপি নম্বরগুলির একটি তালিকা থাকে যা ইতিমধ্যে পোর্ট নম্বর সংযুক্ত থাকে, (যেমন ভ্লাদ দ্বারা উল্লিখিত এবং আরাগেরের দেওয়া হিসাবে দেওয়া হয়েছে ), আপনি এরকম কিছু ব্যবহার করার চেষ্টা করতে পারেন:

sed '/:[0-9]*$/ ! s/$/:80/' ips.txt > new-ips.txt

সুতরাং, উদাহরণস্বরূপ, যদি আপনার ইনপুট ফাইল ভালো কিছু লাগছিল (নোট :80) :

127.0.0.1
128.0.0.0:80
121.121.33.111

চূড়ান্ত ফলাফলটি এরকম কিছু দেখবে:

127.0.0.1:80
128.0.0.0:80
121.121.33.111:80

4
ঠিক আছে, কেবল পরিষ্কার করছি ... সম্ভবত পোর্ট ইতিমধ্যে বিদ্যমান লাইনগুলি বাদ দেওয়ার শর্ত থাকতে হবে।
ভ্লাদ

4
sed '/:[0-9]*$/ ! s/$/:80/'
আরগায়ার

4
এটি আপনার নিজের উত্তরে যুক্ত করুন। পোর্টগুলির সাথে লাইনগুলি বাদ দেওয়ার পরামর্শটি ইতিমধ্যে এখানে মন্তব্যে রয়েছে, আমি ঠিক সঠিক কমান্ডটি লিখেছি।
আরগের

4
যদি ফাইলটিতে সিআরএলএফ টার্মিনেটর থাকে :80তবে নিম্নলিখিত লাইনের শুরুতে যুক্ত করা হবে। dos2unixপ্রয়োজনে প্রথমে ফাইলটি ব্যবহার করুন।
djnz0feh

4
হয় -nপ্রয়োজনীয়? সম্ভবত বেশিরভাগ ব্যবহারকারীর জন্য নয়।
jimh

21

সেড কমান্ডের সংক্ষিপ্ত সংস্করণ :

sed -i s/$/:80/ file.txt

ব্যাখ্যা:

  • sed s tream ইডি itor
    • -i আমি n- রাখি (জায়গায় ফাইল সম্পাদনা)
    • s s ubstistance কমান্ড
    • /replacement_from_reg_exp/replacement_to_text/ বিবৃতি
    • $লাইনের শেষের সাথে ( প্রতিস্থাপন_ফর্ম_গ্রেগ_এক্সপি) মেলে )
    • :80আপনি প্রতিটি লাইনের শেষে পাঠ্য যোগ করতে চান ( প্রতিস্থাপন_ টো টেক্সট )
  • file.txt ফাইলের নাম


13

আপনি যদি প্রতিটি লাইনের শেষে (একই ফাইলে) পাঠ্য যুক্ত করতে চান তবে আপনি -iপ্যারামিটার ব্যবহার করতে পারেন , উদাহরণস্বরূপ:

sed -i'.bak' 's/$/:80/' foo.txt

যাহোক -i বিকল্পটি মানহীন ইউনিক্স এক্সটেনশান এবং সমস্ত অপারেটিং সিস্টেমে উপলব্ধ নাও হতে পারে।

সুতরাং আপনি ব্যবহারটি বিবেচনা করতে পারেন ex(যা vi -e/ এর সমতুল্য vim -e):

ex +"%s/$/:80/g" -cwq foo.txt

যা :80প্রতিটি লাইনে যুক্ত হবে তবে কখনও কখনও এটি ফাঁকা লাইনে যুক্ত করতে পারে।

সুতরাং লাইনটি আসলে কোনও সংখ্যা রয়েছে কিনা তা পরীক্ষা করা আরও ভাল পদ্ধতি এবং উদাহরণস্বরূপ এটি যুক্ত করুন:

ex  +"g/[0-9]/s/$/:80/g" -cwq foo.txt

যদি ফাইলটির আরও জটিল ফর্ম্যাট থাকে তবে তার পরিবর্তে যথাযথ রেজেক্স ব্যবহার করার বিষয়টি বিবেচনা করুন [0-9]


1

একটি পাঠ্য সম্পাদক ব্যবহার করে ^M, প্রতিটি লাইনের শেষে (কন্ট্রোল-এম, বা ক্যারেজ রিটার্ন) পরীক্ষা করুন । আপনাকে প্রথমে সেগুলি সরিয়ে ফেলতে হবে, তারপরে লাইনের শেষে অতিরিক্ত পাঠ্য যুক্ত করুন।

sed -i 's|^M||g' ips.txt
sed -i 's|$|:80|g' ips.txt

0
  1. আপনি ব্যাকেরেফারেন্স কৌশল ব্যবহার করে এটি অর্জন করতে পারেন

    sed -i.bak 's/\(.*\)/\1:80/' foo.txt
    
  2. আপনি এর মতো ওড়না দিয়েও ব্যবহার করতে পারেন

    awk '{print $0":80"}' foo.txt > tmp && mv tmp foo.txt
    

-1

sed -i 's / $ /, / g' foo.txt

আমি আউটপুট শেষে একটি কমা যোগ করার জন্য এটি প্রায়শই করি তাই আমি সহজেই এটি অনুলিপি করে (বা আপনার ফ্যাং ল্যাং) অ্যারেতে অনুলিপি করতে পারি paste

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