কিভাবে বাশে ট্যাবলেট স্টেডাউট স্ট্রিম থেকে তথ্য ফিল্টার করবেন?

আউটপুট মত দেখাচ্ছে এখানে, মূলত:

?       RESTRequestParamObj.cpp
?       plugins/dupfields2/_DupFields.cpp
?       plugins/dupfields2/_DupFields.h

আমাকে দ্বিতীয় কলাম থেকে ফাইল নামগুলি পেতে হবে এবং তাদের rm এ প্রেরণ করতে হবে। AWK স্ক্রিপ্ট যা awk '{print $ 2}' মত চলে যায় তবে আমি অন্য একটি সমাধান আছে কিনা ভাবছি।

2
একটি কৌতূহল হিসাবে, grep -o '[] [^] * $' প্রতিটি ফাইলের নামের আগে একটি স্থান রাখবে, তবে যদি আপনার কাছে স্পেস ছাড়া ফাইল নাম থাকে তবে এটি RM </কোড>।
যোগ লেখক tripleee, উৎস

5 উত্তর

যদি আপনার ? এবং ফাইলের নামের মধ্যে স্পেস থাকে তবে:

cut -c9-

যদি তারা ট্যাব থাকে তবে:

cut -f2
3
যোগ

ফাইল আপনার আউটপুট স্থাপন

$> cat ./text 
?       RESTRequestParamObj.cpp
?       plugins/dupfields2/_DupFields.cpp
?       plugins/dupfields2/_DupFields.h

Sed সঙ্গে এটি সম্পাদনা করুন

$> cat ./text | sed -r -e 's/(\?[\ \t]*)(.*)/\2/g'
RESTRequestParamObj.cpp
plugins/dupfields2/_DupFields.cpp
plugins/dupfields2/_DupFields.h

এখানে Sed লাইনের 2 অংশ মিলছে -

  1. আপনি? ট্যাব বা স্পেস দিয়ে
  2. অন্য চরিত্রগুলি শেষ পর্যন্ত লাইন পর্যন্ত

এবং তারপর এটি শুধুমাত্র দ্বিতীয় অংশে সম্পূর্ণ লাইন পরিবর্তন করে।

1
যোগ

পরিবর্তে কাটা/পার্ল ব্যবহার করুন

cut -f2 -t'\t'|xargs rm -rf

|perl -ne '@cols = split /\t/; print $cols[1]'|xargs rm -rf
0
যোগ

bash only solution, assuming your output comes from stdin:

while read line; do echo ${line##* }; done
0
যোগ
... এবং মনে হচ্ছে আপনার কাছে স্পেস দিয়ে ফাইল নাম নেই। শুধুমাত্র প্রথম অক্ষর zap করতে, $ {line #?} চেষ্টা করে দেখুন। (এটি একটি ওয়াইল্ডকার্ড নয়, আক্ষরিক প্রশ্ন চিহ্ন নয়; শুধুমাত্র প্রশ্ন চিহ্নগুলি সরাতে সামনে একটি ব্যাকস্ল্যাশ যোগ করুন।)
যোগ লেখক tripleee, উৎস

এটি আপনার জন্য কাজ করতে পারে:

 echo "?       RESTRequestParamObj.cpp" | sed -e 's/^\S\+/rm /' | sh

অথবা জিএনইউ সিডি ব্যবহার করে

 echo "?       RESTRequestParamObj.cpp"| sed -r 's/^\S+/rm /e'
0
যোগ