আমি সেডে শেষ লাইনের Nth থেকে সমস্ত কীভাবে মুদ্রণ করব?


9
  • আমি এর পরিপূরক / "বিপরীত" করতে চাই

    sed 13q;d <file.txt
    

    আরও সাধারণভাবে, কি এই ধরণের পরিপূরক / বিপরীত / বিপরীতে করা সম্ভব sed? নাকি কেবল রেগেক্সদের জন্য?

  • আমি কীভাবে তৃতীয় থেকে শেষ লাইনটি প্রিন্ট করব? এর জন্য কি দু'জনের tacগণনা করা দরকার sed? বা sedপিছন থেকে নিজেকে গণনা করার কোনও উপায় আছে ?

উত্তর:


12

অংশ 1

কেবল d13 তম লাইনের একাদশ:

sed '13d' <file.txt

এবং উপরের পরিপূরকগুলি করার একটি সাধারণ উপায় হ'ল:

sed '13!d' <file.txt

অংশ ২

কারণ এটি করা যেতে পারে:

sed -n ':a;${P;q};N;4,$D;ba' <file.txt

নোটটি 4আপনার প্রয়োজনীয় সংখ্যার চেয়ে বেশি Note সুতরাং আপনি যদি শেষ-দশম লাইনটি চান তবে এটি হবে 11

এর সাথে পরীক্ষা করা seq:

$ seq 100 | sed -n ':a;${P;q};N;4,$D;ba'
98
$ 

চেষ্টা করার ব্যাখ্যা

:a        # define label a
${        # match the last line
    P     # print the first line of the pattern space
    q     # quit
}
N         # match all lines: append the next line to the pattern
4,${      # match the range of lines 4 to the end of the file
    D     # delete the first line of the pattern space
}
ba        # match all lines: jump back to label a 

গ্লেন জ্যাকম্যানের মূল্যবান সংযোজন:

এটি ছিল "কেবলমাত্র নবম লাইন"। এখানে "সমস্ত তবে নবম লাইন" রয়েছে:

sed -n ':a;${s/^[^\n]*\n//;p;q};N;4,${P;D};ba'

জিএনইউ \nসেডের সাথে কাজ করে, ক্রমটি অন্যান্য শেডের সাথে কাজ নাও করতে পারে।


আমি বিএসডি সেড (ওএসএক্স) দিয়ে এটি চেষ্টা করে দেখেছি এটি উপরের ফর্মটিতে বেশিরভাগভাবে কাজ করে না। বিষয়গুলি হ'ল:

  1. ; পৃথক রেখায় ব্যবহৃত সাধারণত কাজ করে বলে মনে হয় তবে লেবেলের পরে কাজ করে না
  2. বিএসডি সেডকে ;এক-লাইন {}কমান্ড গোষ্ঠীতে শেষ কমান্ডের পরে আবশ্যক বলে মনে হয় , যেখানে জিএনইউ সেড দেয় না
  3. \nসাধারণত নিয়মিত অভিব্যক্তির মধ্যে ব্যবহার করা যেতে পারে, তবে স্পষ্টতই []বন্ধনী প্রকাশের মধ্যে নয় । সুতরাং নিউলাইনগুলি বাদ দিতে, আমরা [[:alnum:][:punct:][:graph:][:blank:]]পরিবর্তে এর মতো কিছু ব্যবহার করতে পারি , যদিও এটি অন্যান্য অক্ষরগুলিকে বাদ দিতে পারে (বিশেষত অন্যান্য নিয়ন্ত্রণ অক্ষর)।

সুতরাং এটি একটি আরও প্ল্যাটফর্মের স্বাধীন সংস্করণে চেষ্টা:

sed -n ':a
${s/^[[:alnum:][:punct:][:graph:][:blank:]]*\n//p;q;};N;4,${P;D;};ba'

এটি ওএসএক্স এবং উবুন্টুর অধীনে কাজ করে বলে মনে হচ্ছে।


@jimmij দঃপূঃ নেটওয়ার্কের মধ্যে সংশ্লিষ্ট প্রশ্ন সম্পর্কে অন্যান্য উত্তর সুপারিশ করে একটি head/ tailসমাধান অনেক ধীর একটি চেয়ে sedসমাধান। ধন্যবাদ যদিও.
isomorphismes

3
@ আইসোমর্ফিজমস কোনও ফাইল কোনও ফাইলের রেখার সংখ্যা জানতে পারে না যদি না এটি পুরো ফাইলটি দিয়ে যায়। এর আশেপাশে কোনও উপায় নেই। নীচ থেকে গণনা করার একমাত্র উপায় হ'ল হয় ফাইলটি উল্টো করে উপরে থেকে গণনা করা বা এটি দুবার পার্স করা। সুতরাং মাথা / লেজ যত তাড়াতাড়ি পায় তা হতে চলেছে।
টেরডন

@ আইসোমরফিস্ম ... কারণ তারা ( head/ tail) তারা যা করে তা করার জন্য অনুকূলিত।
পিটার্ফ

@ আইসোমর্ফিজমস - আপনার প্রয়োজনীয় সমস্ত অংশগুলির সাথে সম্পাদিত
ডিজিটাল ট্রমা

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