আমি একটি পাঠ্য ফাইলে কমান্ড হিসাবে একটি নির্দিষ্ট লাইন কীভাবে চালাতে পারি?


11

কখনও কখনও আমাকে শেল স্ক্রিপ্টে থাকা একটি একক কমান্ড প্রয়োগ করতে হবে।

আমি ইতিমধ্যে জানি sed -n 'line_num p'যে লাইন মুদ্রণ করতে পারেন। কিন্তু আমি কীভাবে নির্দিষ্ট কমান্ড হিসাবে মুদ্রিত আউটপুটটি কার্যকর করতে পারি?

উত্তর:


9

এই লোকটি চেষ্টা করুন =):

sed -n 'line_num p' | bash

অথবা

"$(sed -n 'line_num p')"

@ মেকজার্ভ আমি নিজের শিক্ষার জন্য সেই বিবৃতিটির প্রসঙ্গটি জানতে আগ্রহী।
ব্র্যাচলে

কোন প্রয়োজন নেই মধ্যবর্তী একটি স্থান লাগাতে line_numএবং pউদাহরণস্বরূপ, তাই যদি line_num, 123 তাহলে আপনি যা করতে পারেন sed -n 123p | bash। এবং যদি shযথেষ্ট হয় তবে তার shপরিবর্তে কেবল ব্যবহার করুন bash
janos

সুতরাং, sed -n 'line_num p' | shঅন্য সমাধান হতে পারে? এটির কি আরও সামঞ্জস্য রয়েছে?
জেন

1
@ জেন - এটি স্ক্রিপ্টের জন্য কী শেল লক্ষ্যবস্তু রয়েছে তার উপর নির্ভর করে। এটি শেল shআসলে কী তার উপরও নির্ভর করে । দেবিয়ান (এবং উত্পন্ন) সিস্টেমে shসাধারণত হয় dash। যদি স্ক্রিপ্টটি dash (বা অন্যথায় বহনযোগ্য সিনট্যাক্সের উপর নির্ভর করে) জন্য রচিত হয় তবে সম্ভবত, হ্যাঁ, তবে এটি যদি লেখা থাকে bashতবে প্রায় অবশ্যই না।
মাইক্রজারভ

এটি কি ইতিহাসের ফাইলের সাথে করা যায় যাতে আমি যদি চালিত হয় historyএবং আমি দেখতে পাই যে আমি 900 লাইনটি চালাতে চাই, আমি কি 900 লাইনটি চালাতে পারি?
কোডেকবয়

3

আপনি যদি এটি ইন্টারেক্টিভভাবে করছেন, আপনি বাশ ইতিহাসে লাইনটি লিখতে পারেন:

history -s "$(sed -n 'line_num p')"

তারপরে Enterপঠন বাফারে লাইনটি সন্নিবেশ করানোর জন্য টিপুন এবং এটি সম্পাদন করুন; এটি আপনাকে দেরি করার আগে লাইনে এক নজরে দেখার সুযোগ দেয়।


এটি বেশ চালাক এবং সম্ভবত একটি ভাল ধারণা।
মাইক্রজারভ

এই-অপশনটির অর্থ এখানে কী? আমি এর ব্যাখ্যা খুঁজে পাচ্ছি নাman history
জেন

@ জেন: historyএকটি অন্তর্নির্মিত, তাই এটিতে নথিবদ্ধ হয় help history(বা man bash, তবে এটি প্রচুর পড়া)। উপরের উদ্ধৃতি দিয়ে, history -s"একক প্রবেশের হিসাবে
এআরজিগুলিকে

2

আপনি করতে পারেন...

{ head -n"$((NUM-1))"; IFS= read -r line; } </path/to/script >/dev/null
eval "$line"

এটি $NUMআপনার স্ক্রিপ্ট থেকে শেল ভেরিয়েবলের মধ্যে কেবলমাত্র লাইন পেয়ে যাবে $lineএবং তারপরে এটি বর্তমান শেলের একটি কমান্ড হিসাবে মূল্যায়ন করবে।

এটি করার আরেকটি উপায় দেখতে পারা যায়:

 </path/to/script sed "${NUM}q;d" >/tmp/"$$"
 . /tmp/"$$" ; rm /tmp/"$$"

1
'এভাল' 'অশুভ' এর একটি সাধারণ ভুল বানান। যদি উত্তরটি উত্তর হয় তবে অবশ্যই আপনি ভুল প্রশ্ন করছেন। দেখুন mywiki.wooledge.org/BashFAQ/048
গিলেজ Quenot

1
হা. সবাই ভালোবাসে eval
মাইকজারভেল

gnu sedহয়েছে eপতাকা কিছু তাই sed "${NUM}"'!d;s/^//e;q'এছাড়াও কাজ করবে
don_crissti

2

আপনি কি ভিপি (লিনাক্সে vi) দিয়ে আপনার স্ক্রিপ্ট সম্পাদনা করছেন? Vi তে ম্যাপিং যুক্ত করুন:

:nmap <F4> Y:!<C-R>"<C-H><CR>

এবং এরপরে আপনি vi 4-তে আকর্ষণীয় লাইনে থাকুন


-2

ব্যাশে আপনি নিম্নলিখিত কমান্ডটি চালাতে পারেন:

for line in $(cat file.txt); do command $line; done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.