নিউলাইনগুলিকে স্পেসে রূপান্তর করতে সেড ব্যবহার করে


22

বলুন আমার কাছে একটি শেল ভেরিয়েবল $stringরয়েছে যা বেশ কয়েকটি নিউলাইন সহ কিছু পাঠ্য ধারণ করে, যেমন:

string="this
is 
a test"

আমি এই স্ট্রিংটিকে একটি নতুন স্ট্রিংয়ে রূপান্তর করতে চাই new_stringযেখানে সমস্ত লাইন ব্রেকগুলি স্পেসে রূপান্তরিত হয়:

new_string="this is a test"

আমি চেষ্টা করেছিলাম:

print $string | sed 's/\n/ /g'

কিন্তু এটি কার্যকর হয়নি

আমি আরও ভাবছি যে এটি করার কোনও উপায় আছে perl -0777 's/\n/ /g'বা সম্ভবত কমান্ডটি ব্যবহার করে tr?


উত্তর:


32

আপনি যদি কেবল স্ট্রিংয়ের মধ্যে নতুন লাইনগুলি সরাতে চান তবে আপনাকে ব্যবহার করার দরকার নেই sed। আপনি ঠিক ব্যবহার করতে পারেন

$  echo "$string" | tr '\n' ' '

অন্যরা যেমন বলেছিল

তবে আপনি যদি কোনও ফাইলের মাধ্যমে নতুন লাইনগুলিকে স্পেসে রূপান্তর করতে চান sedতবে আপনি ব্যবহার করতে পারেন:

$ sed -i ':a;N;$!ba;s/\n/\t/g' file_with_line_breaks

বা এমনকি awk:

$ awk '$1=$1' ORS=' ' file_with_line_breaks > new_file_with_spaces

1
spongeএকটি ইনপুট ফাইল ওভাররাইট করার জন্য একটি দরকারী ইউটিলিটি। এটি প্যাকেজের অংশ moreutils... যেমন awk '$1=$1' ORS=' ' file |sponge file
পিটার.ও

@ ফেফার তথ্যের জন্য ধন্যবাদ। ইনস্টল করা হচ্ছে moreutils...
পিফোর


4

তবুও অন্য বিকল্পটি ব্যবহার করা হবে xargs(যা অতিরিক্ত একাধিক সাদা স্থানকে চেপে ফেলে):

string="this
    is 
a    test"

printf "$string" | xargs   # this is a test

3

ইকো সাদা স্থান উপেক্ষা করে, তাই এটি কাজ করা উচিত:

new_string=`echo $string`

হ্যাঁ, এটি কার্যকর হবে তবে সম্ভবত খুব ভাল। এটি একক জায়গায় বহু সাদা স্থানকে ধসে পড়বে। এর মধ্যে রয়েছে টিএবিএসকে স্পেসে রূপান্তর করা।
পিটার.ও

3

যদি আপনি ইতিমধ্যেই একটি ব্যাশ পরিবর্তনশীল স্ট্রিং থাকে, তাহলে আপনার উদাহরণ শো হিসেবে, এটা অর্থহীন এবং সম্পদ (এবং আরও অনেক কিছু টাইপিং) এর অযথা কল হয় sed, awk, printf, ইত্যাদি ... আপনি শুধু ব্যবহার করতে পারেন ব্যাশ পরিবর্তনশীল সম্প্রসারণ :

string="${string//$'\n'/ }"

এমনকি আপনাকে এটি পুনরায় বরাদ্দ করতে হবে না। আপনি প্রসারণটি যেমন রয়েছে তেমন ব্যবহার করতে পারেন এবং $stringঅপরিবর্তিত রেখে যেতে পারেন ।

printf "${string//$'\n'/ }" >file

3

আপনি এই awk কমান্ডটিও চেষ্টা করতে পারেন,

awk -v RS="" '{gsub (/\n/," ")}1' file

উদাহরণ:

$ (echo This; echo is; echo a; echo test.) | awk -v RS="" '{gsub (/\n/," ")}1'
This is a test.

1
state=$(set +o)
set -f ; IFS='
'; set -- $string
unset IFS; string="$*"
eval "$state"

এটি \nশেল ভেরিয়েবলের $stringমধ্যে ঘটে যাওয়া এক বা একাধিক ইওলাইন অক্ষরের যে কোনও অনুক্রমকে একক রূপান্তর করে <space>


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