সেড ফ্রিবিএসডি এবং লিনাক্সে আলাদা আচরণ করে?


12

আমি লিনাক্স এবং ফ্রিবিএসডি উভয়ই ব্যবহার করি (বিশেষত আমি ডেবিয়ান লিনাক্স এবং পিসি-বিএসডি ব্যবহার করি) এবং আমি কিছু অদ্ভুতরূপ পেয়েছি sed

আমার প্রায়শই "ট্যাব বিভাজিত মান" ফাইলগুলিকে "কমা বিভাজিত মানগুলিতে" রূপান্তর করতে হবে। আমার জানা সবচেয়ে সহজ উপায়টি হ'ল ব্যবহার করা sed,

sed 's/\t/,/g' inputFile.txt > outputFile.csv

এটি লিনাক্সে পুরোপুরি কাজ করে: এটি প্রতিটি ট্যাবকে কমা দিয়ে প্রতিস্থাপন করে ... তবে ফ্রিবিএসডি-তে, এটি কোনও কিছুর প্রতিস্থাপন করে না !!!

আমি কিছু অনুপস্থিত করছি? ফ্রিবিএসডি এর সাথে এমন একটি বাক্য গঠন আছে sedযা লিনাক্সের চেয়ে আলাদা?

উত্তর:


9

জিএনইউ শেডের সাথে সামঞ্জস্য রাখতে আপনার -Eবিকল্পটি (বা ম্যানুয়ালটিতে বর্ণিত-r হিসাবে ) ব্যবহার করা উচিত । আপনার ক্ষেত্রে, আপনি যদি GNU ব্যান্ডউইডথ ইনস্টল করতে পারে যদি আপনি এটি (পোর্ট ব্যবহার করা হয় gsed FreeBSD 'র দিকে), অথবা এটি বন্দর স্ক্রিপ্ট দীর্ঘ প্রচেষ্টার নিতে হবে।

এবং মনে রাখ. বিএসডি-তে কিছু কমান্ড যদি সেই ইউটিলিটির gnu সংস্করণের মতো কাজ না করে তবে এর অর্থ এটি ভাঙা নয়;)


1
ধন্যবাদ. -Eবিকল্প কৌতুক (উভয় FreeBSD 'র উপর এবং Mac OS X দিকে) করে তোলে।
ব্যারানকা

আমার ফ্রিবিএসডি 9-এ -E বিকল্পটি কোনও সহায়তা করে না।
অর্ক-কুন

6

হ্যাঁ, বিভিন্ন পার্থক্য, হয় আচরণকে-i শুধুমাত্র এক আমি আমার মাথার উপরে বন্ধ জানা হচ্ছে।

আমি কখনই বিএসডি ব্যবহার করি নি তাই আমি বিশদটি সহ সত্যই সহায়তা করতে পারি না তবে trপরিবর্তে ব্যবহারের মত কাজ হতে পারে :

tr '\t' , < inputFile.txt > outputFile.csv

একটি মনোরম পার্শ্ব প্রতিক্রিয়া এটি trউল্লেখযোগ্যভাবে দ্রুত হওয়া উচিত। আমি আমার লিনাক্সে 50000 লাইনের সাথে একটি পরীক্ষা ফাইল ব্যবহার করে এটি পরীক্ষা করেছি, যার প্রত্যেকটিতে 2 টি ট্যাব রয়েছে:

$ time tr '\t' , < foo.txt > /dev/null 

real    0m0.004s
user    0m0.000s
sys     0m0.000s

$ time sed 's/\t/,/g' foo.txt > /dev/null 

real    0m0.039s
user    0m0.036s
sys     0m0.000s

tr '\t' ,তুলনায় আরও পোর্টেবল tr $'\t' ,tr '[\t]' '[,]'এমনকি কিছু পুরানো SysV সিস্টেমে পোর্টেবল হতে পারে।
স্টাফেন চেজেলাস

ট্যাব এর জন্য ডিফল্ট ডিলিমিটার cut। জন্য POSIX বৈশিষ্ট trহল সেখানে । আমি [পুরানো SysV জন্য প্রয়োজন সম্পর্কে ভুল ছিল । যে হিসাবে পসিক্স অনুমানের পয়েন্টগুলি [কেবল সেখানে রেঞ্জগুলির জন্য প্রয়োজন।
স্টাফেন চেজেলাস

@ স্টাফেন চ্যাজেলাস তাই এটি দুঃখিত, আমি নিশ্চিত না হয়ে আমি এর সাথে কী বিভ্রান্ত করছি। যে কোনও ক্ষেত্রে স্পষ্টতার জন্য ধন্যবাদ।
টেরডন

4

হ্যাঁ, জিএনইউ sedফ্রিবিএসডি এর বিপরীতে sedএএনএসআই সি পালানোর ক্রমগুলি যেমন \tনিয়মিত অভিব্যক্তিতে ব্যাখ্যা করে না ।

এক্ষেত্রে কমপক্ষে একটি সাধারণ ডিনোমিটার পাওয়ার জন্য একটি উপায় printf

tab="$(printf '\t')"
printf '\t\n' | sed 's/'"${tab}"'/,/g'
printf '\t\n' | sed 's/'"$(printf '\t')"'/,/g'

sed -iইনস-প্লেস ফাইল সম্পাদনার জন্য আচরণটি সামঞ্জস্যপূর্ণ করা যেতে পারে যদি কোনও সুইচ বা বিকল্প তত্ক্ষণাত -iসুইচ অনুসরণ করে , যেমন sed -i -e 's/x/X/g' fileজিএনইউ sedএবং ফ্রিবিএসডি উভয়ের পক্ষে কাজ করে sed

ফ্রিবিএসডি sed(ফ্রিবিএসডি 8.1 বা আরও নতুন) এর সাম্প্রতিক সংস্করণগুলিতে জিএনইউয়ের -rসাথে সামঞ্জস্যতা বাড়াতে স্যুইচ রয়েছে sed

(তদ্ব্যতীত, sedনিয়মিত অভিব্যক্তিতে POSIX চরিত্রের ক্লাসগুলির ব্যবহারও সামঞ্জস্যতা নিশ্চিত করার একটি ভাল উপায়)।

বিকল্পের জন্য, পসিক্স-কনফর্মেন্টsed বাস্তবায়ন দেখুন: মাইন করা - একটি ছোট, কম, দ্রুত এসইডি বাস্তবায়ন


3

এর TABপরিবর্তে আপনার আক্ষরিক চরিত্রটি ব্যবহার করা উচিত \t:

sed 's/    /,/g' inputFile.txt > outputFile.csv

আরেকটি প্রশ্নে স্টিফেনের এই মন্তব্য দেখুন ।

নিম্নলিখিত নিবন্ধটি আপনার আগ্রহীও হতে পারে:

আমি প্রাসঙ্গিক অংশ উদ্ধৃত:

রেজেক্স পার্থক্য

নিয়মিত এক্সপ্রেশন সিনট্যাক্স এসইডির বিভিন্ন সংস্করণের মধ্যে সূক্ষ্মভাবে পৃথক হয়। বেশিরভাগ পার্থক্যের মধ্যে অ-প্রিন্টিং অক্ষর যেমন ASCI বেল এবং ফর্ম ফিডগুলির সাথে মেলে ব্যবহৃত বিশেষ পালানোর ধরণ জড়িত।


0

লগইন করার পরে আমি পরবর্তী ঘোষণাটি দেখি এবং এটি সংরক্ষণ করি। আশা করি এটি অন্যদের জন্যও কার্যকর হবে

জায়গাটিতে কোনও ফাইল সম্পাদনা করার জন্য সেড (1) ব্যবহার করতে চান? ঠিক আছে, প্রতিটি 'ই' কে 'ও' দিয়ে প্রতিস্থাপন করতে, 'ফু' নামের একটি ফাইলে, আপনি এটি করতে পারেন:

sed -i.bak s/e/o/g foo

এবং 'foo.bak' নামের একটি ফাইলে আপনি আসলটির একটি ব্যাকআপ পাবেন তবে আপনি যদি ব্যাকআপ না চান:

sed -i '' s/e/o/g foo

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