ওএস এক্সের সাথে নির্দিষ্ট সংখ্যার পরে সমস্ত উপস্থিতি কীভাবে প্রতিস্থাপন করা যায়


2

আমি একটি খারাপ .csvফাইল সংশোধন করার চেষ্টা করছি , যেখানে শেষ 'কলাম' অতিরিক্ত ,অক্ষরের কারণে বিভিন্ন সংখ্যক কলামে বিভক্ত । আমি sedপ্রথম 4 টি কমা রাখতে ব্যবহার করতে চাই এবং বাকীটি প্রতিস্থাপন করব ;। নিম্নলিখিতগুলি ওএস এক্সে কাজ করছে না বলে মনে হচ্ছে:

sed 's/,/;/4g' file

ওএস এক্সে এর বিকল্প আছে কি?

উত্তর:


0

পরীক্ষার জন্য আমার কাছে কোনও ওএসএক্স বক্স নেই, তবে এটি ব্যবহার করে দেখুন:

sed -E '
    s/^([^,]*),([^,]*),([^,]*),(.*)/\1\x1f\2\x1f\3\x1f\4/
    s/,/;/g
    s/\x1f/,/g
' file

এটি প্রথম 3 টি কমা ascii "ইউনিট বিভাজক" নিয়ন্ত্রণ চরিত্রে রূপান্তরিত করে, বাকী সমস্ত কমা অনুবাদ করে সেমিকোলনে, তারপরে নিয়ন্ত্রণ অক্ষরগুলিকে আবার কমাতে অনুবাদ করে।

ডেমো:

$ echo "a,b,c,d,e,f" | sed -E 's/^([^,]*),([^,]*),([^,]*),(.*)/\1\x1f\2\x1f\3\x1f\4/; s/,/;/g; s/\x1f/,/g'
a,b,c,d;e;f
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.