নাল বাইটগুলি সরিয়ে ফেলতে কীভাবে সেড ব্যবহার করবেন?


37

sedকোনও ফাইল থেকে নাল বাইট অপসারণ করার প্রবণতা কী ? আমি চেষ্টা করছি:

s/\000//g

তবে তা শূন্যের স্ট্রিংগুলি ছিটকে দিচ্ছে।

s/\x00//g

মনে হয় কোন প্রভাব আছে। আমি এটি একটি sedস্ক্রিপ্টে করার চেষ্টা করছি , সুতরাং আমি নিশ্চিত না যে echoকৌশলটি কাজ করবে।

উত্তর:


40

আপনি কীভাবে এটি সহকারে অর্জন করতে পারবেন তা আমি জানি না sed, তবে এটি এমন একটি সমাধান যা এর সাথে কাজ করে tr:

tr < file-with-nulls -d '\000' > file-without-nulls

এটি এমন একটি সমাধান যা এর জন্য sedকিছু অনুষ্ঠানে কাজ করে তবে সমস্ত ক্ষেত্রে হয় না:

sed 's/\x0//g' file1 > file2

এটি এমন একটি সমাধান যা মহাকাশ অক্ষরগুলির প্রতিস্থাপনের সাথে জড়িত যা সকল ক্ষেত্রে কাজ করা উচিত:

sed 's/\x0/ /g' file1 > file2

10
এটি দেখতে দেখতে একেবারেই অসম্পূর্ণ উত্তর। কেন এটি কিছু উপলক্ষে কাজ করবে এবং অন্যদের জন্য নয়, এবং যদি তা হয় তবে উদাহরণটি কার্যকর হবে না?
বার্লপ

@ বারলপ: যেভাবে এটি বাস্তবায়িত হয়? ওপি একটি নির্দিষ্ট করে নি এবং আমি প্রতিটি বাস্তবায়ন গণনা করতে যাচ্ছি না ...
তামারা উইজসম্যান

4
ওয়েল এটি তখন আমার কাছে দুর্দান্ত লাগছে, তাই আপনি বলছেন এটি এসইডি বাস্তবায়নের উপর নির্ভর করে। আপনি যদি না বলে থাকেন যে আপনি সম্ভাব্য পরামর্শটি ছেড়ে দিয়ে গেছেন যে একটি এসইডির প্রয়োগের ফলে ফাইলের ডেটার উপর নির্ভর করে একটি ফাইল থেকে অন্য ফাইলটি নলগুলি সরিয়ে দেওয়া যেতে পারে।
বার্লপ

3
এটি "tr -d '\ 000' <ফাইল-নালস> ফাইল-নাল ছাড়াই" হওয়া উচিত নয়?
Seamus Abshere

1
আমার জন্য কাজ করে ™। এছাড়াও দরকারী: -iস্থানে ফাইল রূপান্তর করতে প্যারামিটার।
zbyszek

8

trআমার ফাইলে আরও কিছু বাইট ছড়িয়েছে এবং sedকিছুই প্রতিস্থাপন করেনি। আমি এটি sedপাইথনে না করে শেষ করেছি :

f = open('file-with-0bytes.dump')
for l in f.readlines():
  print l.replace("\0", '')

এখানে একটি পাইপযোগ্য ওয়ান-লাইনার রয়েছে:

python -c 'import sys; sys.stdout.write(sys.stdin.read().replace("\0", ""))'

আমি লক্ষ্য করেছি যে কিছু কমান্ড আসলে নাল বাইটগুলি সেখানে ছেড়ে দেয় তবে সেগুলি আর দৃশ্যমান নয়, কমপক্ষে কোনও ওএসএক্স টার্মিনালে নয়। আমি hexdumpএটি ডিবাগ করতাম ।


3

রিজেক্স সম্পাদন করতে পার্ল ব্যবহার করা বেশ সহজ। শুধু প্রতিস্থাপন sedসঙ্গে perl -np -e:

$ printf 'one\0two\0' | perl -np -e 's/\0/\n/g'
one
two

সঙ্গে -nবিকল্প, regexes, পাতিপাতি চালানো হয় sed ঠিক।

আপনি যদি রেকর্ড বিভাজক হিসাবে শূন্য বাইট ব্যবহার করতে চান তবে পারেলের -0বিকল্পটি ব্যবহার করুন ।

$ printf 'one\0two\0' | perl -np0 -e 's/^/prefix /; s/\0/\n/g'
prefix one
prefix two
$ printf 'one\0two\0' | perl -np -e 's/^/prefix /; s/\0/\n/g'
prefix one
two

আপনি চালিয়ে পার্লের কমান্ড-লাইন বিকল্পগুলি সন্ধান করতে পারেন perldoc perlrun


1

নাল বাইটের সাথে মেলে, আমি সাইগউইনের এসইডির সাথে এই রেজেক্সটি ব্যবহার করেছি:

[^ \ X01- \ x7F]


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