stdout- এ থেকে লাইন অক্ষরের শেষ সরাবেন? একটি একক লাইন মধ্যে একাধিক লাইন


14

আমি একটি স্ক্রিপ্ট নিম্নলিখিত টেক্সট আউটপুট আছে। এই আউটপুট Netopia 2210-02 ADSL2 মডেম।

ADSL Line State:        Up
ADSL Startup Attempts:  1
ADSL Modulation:        DMT
ADSL Data Path:         Fast
Datapump Version:       DSP 7.2.3.0, HAL 7.2.1.0
SNR Margin:                   8.20        9.00 dB
Line Attenuation:            57.50       31.00 dB
Output Power:                17.09       12.34 dBm
Errored Seconds:                 0           0
Loss of Signal:                  0         476
Loss of Frame:                   0           0
CRC Errors:                  57921         416
Data Rate:                    2880        1024

আমি কীভাবে প্রতিটি লাইনের শেষ প্রান্তের অক্ষরটি সরিয়ে ফেলতে পারি? আমি (হ্যাঁ এটা কুৎসিত) ভালো কিছু চেহারা আউটপুট চাই:

ADSL Line State:        Up ADSL Startup Attempts:  1 ADSL Modulation:        DMT ADSL Data Path:         Fast Datapump Version:       DSP 7.2.3.0, HAL 7.2.1.0 SNR Margin:                   8.20        9.00 dB Line Attenuation:            57.50       31.00 dB Output Power:                17.09       12.34 dBm Errored Seconds:                 0           0 Loss of Signal:                  0         476 Loss of Frame:                   0           0 CRC Errors:                  57921         416 Data Rate:                    2880        1024 

আমি এর মতো কয়েকটি সমাধান চেষ্টা করেছিলাম, তবে সেগুলি কার্যকর হয় না:

# (This simply outputs the contents of the script, unmodified)
stefanl@hosta:~/Work/Cacti $ ./script | sed -e 's/$//'

আমিও ব্যবহার করার চেষ্টা tr। আমি নিম্নলিখিত কমান্ডটি প্রতিটি নতুন লাইন অক্ষরকে স্থানের অক্ষরের সাথে প্রতিস্থাপন করার প্রত্যাশা করছিলাম। এই একাধিক লাইনের গ্রহণ করা এবং তাদের এক দীর্ঘ একক লাইন একত্রিত হবে। পরিবর্তে, এই শুধুমাত্র আউটপুট শেষ লাইনটি প্রদর্শন করা হয়। এটা তোলে আউটপুট পরের লাইনে সঙ্গে প্রতিটি পরবর্তী লাইন ওভাররাইট বলে মনে হয়।

stefanl@hosta:~/Work/Cacti $ ./script | tr '\n' ' '
Data Rate:                    2880        1024stefanl@hosta:~/Work/Cacti $
stefanl@hosta:~/Work/Cacti $

আপডেট :

আরও পরীক্ষার পরে, প্রতিটি লাইন মত একটি ফিরতি অক্ষর দ্বারা পূর্বে হয় দেখায়। হিসাবে এই শো ^Mযখন ব্যবহার less। সুতরাং, আমি দুটি trবিবৃতি যোগ । ডিলিট সম্পর্কে newline অক্ষর এক, এক রিটার্ন চরিত্র মুছে দিন।

./script | | tr -d '\n' | tr -d '\r'

উত্তর:


18

sedকাজ করবে না (সহজে) কারণ এটি একটি সময়ে এক লাইন পরিচালনা; আপনি এটা করতে পারে, কিন্তু এটা ধরে বাফারের মধ্যে পুরো ইনপুট অনুলিপি জড়িত করা হবে

trআসলে আপনি এটা আটকানো কাজ করা উচিত; আপনি কি নিশ্চিত যে নিউলাইনগুলি \nএস? আপনি নতুন লাইন মুছে ফেলার পরিবর্তে তাদের শূণ্যস্থান রূপান্তর দ্বারা এটি একটি বিট প্রক্রিয়া সহজ করতে পারেন:

tr -d '\n'

উভয় tr '\n' ' 'এবং tr -d '\n' একটি অদ্ভুত উপায়ে লাইন মোড়ানো হবে। আমি ফলাফল দেখানোর জন্য আমার প্রশ্ন আপডেট করা হয়েছে। তাই, আমিই হয়তো ব্যবহার করতে হবে tr, কিন্তু আমি ঠিক কিভাবে এটি সঠিকভাবে ব্যবহার ব্যবহার করতে জিনিসটা প্রয়োজন।
স্টিফান লাসিউইস্কি

এটি সম্পর্কে কী অদ্ভুত তা আপনি প্রসারিত করতে পারেন? কারণ আপনার দ্রুত আউটপুট শেষ লাইন হিসেবে একই লাইনে শেষ পর্যন্ত করা হয় অবিকল কারণ আপনার লাইনের শেষে '\ এন' মুছে করেছি। আপনি শেষ ফলাফল আপনার জন্য যাচ্ছি বর্ণনা করেন, তাহলে আমি নিশ্চিত কেউ উপযুক্ত ফিল্টার সঙ্গে আসা পর্যন্ত হবে নিশ্চিত নই।
স্টিভেন ডি

ঠিক আছে, আমার ধারণা আমি আরও পরিষ্কার হতে পারি be আমি একটি একক লাইন মধ্যে এই একাধিক লাইনের মোড়ানো প্রত্যাশী ছিল। আমি আশা tr '\n' ' 'newline অক্ষর মুছে ফেলুন এবং একটি স্থান অক্ষর সঙ্গে এটি প্রতিস্থাপন, সেইজন্য এবং এক দীর্ঘ লাইন আছে।
স্টিফান লাসিউইস্কি

@ স্টিভেন: আমি কী দেখার প্রত্যাশা করছিলাম এবং আসলে কী স্ক্রিনে মুদ্রিত হয়েছিল তা আলোচনার জন্য আমি আমার প্রশ্ন আপডেট করেছি।
স্টিফান Lasiewski

হুম। যদি না আপনার আউটপুট \ N দিয়ে শেষ করা হয় না এই আপনি আউটপুট হিসেবে আশা করছে দিতে হবে না। আপনি একটি ফাইল সেটিকে বংশীধ্বনিতুল্য চেষ্টা করেছেন এবং তারপর নিশ্চিত যে লাইন মোড়ানো কিছু যে আপনার মেয়াদ তোমার জন্য করছে না?
স্টিভেন ডি

5

ব্যতীত tr, কিছু অন্যান্য পদ্ধতি আপনি ব্যবহার করতে পারেন

awk

awk '1' ORS= file

খোল

while read -r line; do printf "%s " "$line"; done <file

sed

sed -e ':a' -e 'N;s/\n/ /;ba' file

0

tr -s '\n'নতুন লাইনের একক ঘটনার সাথে পুনরাবৃত্ত নিউলাইন অক্ষরের ক্রমগুলি প্রতিস্থাপন করতে ব্যবহার করুন ।

উদাহরণ:

>>> echo -e "Squeeze\n\n\nthose\n\n\n\nnewlines\n"
Squeeze


those



newlines

2z [franck:~] $ 
>>> echo -e "Squeeze\n\n\nthose\n\n\n\nnewlines\n" | tr -s '\n'
Squeeze
those
newlines

(দেখুন man tr)


0

নিউলাইন চরিত্রগুলি সরাতে, এটি tr -d '\n' < file। যাইহোক, সব লাইন যোগদানের জন্য, যে paste -sd '\0' file

tr -d '\n' যেমন একটি newline অক্ষর দিয়ে এক লাইন বিনষ্ট না অ-পাঠ্য আউটপুট উৎপন্ন হয়।

মুছে ফেলার জন্য, সব সি আর অক্ষর, আপনি কি করতে পারেন:

tr -d '\r' < file | paste -sd '\0' -

শুধুমাত্র সি আর কিছু অক্ষর আছে যা লাইনের শেষের দিকে রয়েছে অপসারণ করতে:

CR=$(printf '\r')
sed "s/$CR\$//" < file | paste -sd '\0' -

বা awkসমস্ত কিছুর জন্য ব্যবহার করুন :

awk '{gsub(/\r$/, ""); printf "%s", $0} 
     END {if (NR) print ""}' < file

বা ব্যবহার করুন dos2unix(যা এই অনুসরণকারী সিআরএসগুলি সরিয়ে ফেলবে এবং মাইক্রোসফ্ট ওএসএস থেকে পাঠ্য ফাইলগুলি সহ আরও কিছু সমস্যা সমাধান করবে):

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