অতিরিক্ত নিউলাইন চরিত্রগুলি যুক্ত করা থেকে আমি কীভাবে বিরত থাকব


17

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

sed -e 's|\<LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_1.xml > ${XMLDIR}/statement_tmp_2.xml

sed -e 's|\</LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_2.xml > ${XMLDIR}/statement_tmp_3.xml

od -cসমস্ত 3 টি ফাইল ব্যবহার করে নিম্নলিখিত আউটপুট দেয়।

বিবৃতি_tmp_1.xML ( \nফাইলের শেষে নেই)

1314700    T   A   T   E   M   E   N   T   >   <   /   L   I   S   T   _
1314720    G   _   S   T   A   T   E   M   E   N   T   >   <   /   G   _
1314740    S   E   T   U   P   >   <   /   L   I   S   T   _   G   _   S
1314760    E   T   U   P   >   <   /   A   R   X   S   G   P   O   >
1314777

বিবৃতি_tmp_2.xML ( \nফাইলের শেষে নেই)

1314700    S   T   A   T   E   M   E   N   T   >   <   /   L   I   S   T
1314720    _   G   _   S   T   A   T   E   M   E   N   T   >   <   /   G
1314740    _   S   E   T   U   P   >   <   /   L   I   S   T   _   G   _
1314760    S   E   T   U   P   >   <   /   A   R   X   S   G   P   O   >
1315000

বিবৃতি_tmp_3.xml ( \nফাইলের শেষে - এটি কোথা থেকে এসেছে?)

1314700    S   T   A   T   E   M   E   N   T   >   <   /   L   I   S   T
1314720    _   G   _   S   T   A   T   E   M   E   N   T   >  \n   <   /
1314740    G   _   S   E   T   U   P   >   <   /   L   I   S   T   _   G
1314760    _   S   E   T   U   P   >   <   /   A   R   X   S   G   P   O
1315000    >  \n
1315002

আমি এআইএক্স 5.3 চালাচ্ছি

মূলত, আমি চাই এটি অতিরিক্ত যুক্ত করা বন্ধ করুন \n, বা এটি সরিয়ে দেওয়ার কোনও উপায় সন্ধান করুন।


কেবল একটি প্রশ্ন: আপনি কেন আপনার বিকল্প প্রতিস্থাপনে আক্ষরিক নিউলাইন ব্যবহার করছেন যখন আপনি s|...|&\n|ঠিক পাশাপাশি ব্যবহার করতে পারতেন ?
জোসেফ আর।

1
@JosephR। \nডানদিকে পোর্টেবল নয়।
স্টাফেন চেজেলাস

পছন্দ করুন এটি কি সিআর বনাম সিআরএলএফ জিনিস?
জোসেফ আর।

2
একটি ফাইল যা একটি নিউলাইন চরিত্রের শেষ হয় না এটি কোনও পাঠ্য ফাইল নয়, সুতরাং তাদের পাঠ্য ব্যবহারের সাথে আচরণ অনির্দিষ্ট । ব্যবহার perlবা অন্যান্য সরঞ্জাম যা বাইনারি ডেটা নিয়ে কাজ করতে পারে।
স্টাফেন চেজেলাস

4
@JosephR। না, \<LF>এটি কোনও এলএফ চরিত্র যুক্ত করার theতিহ্যগত এবং পসিক্স উপায়। GNU ব্যতীত অন্য কোনও কিছুর ক্ষেত্রে \nসাধারণত একটি nচরিত্রকে প্রতিস্থাপন করতে পারে sed
স্টাফেন চেজেলাস

উত্তর:


10

আপনার নিজেকে ভাগ্যবান বিবেচনা করা উচিত যে এআইএক্স sedযোগ করেছে যে নতুন লাইনের অক্ষরগুলি হারিয়েছে।

একটি খালি খালি ফাইল যা কোনও নতুন লাইনের অক্ষরে শেষ হয় না এটি কোনও পাঠ্য ফাইল নয় (কমপক্ষে একটি পাঠ্য ফাইলের POSIX সংজ্ঞা অনুযায়ী) একটি পাঠ্য ফাইলকে বোঝায় লাইন এবং লাইনগুলি হ'ল (খুব বেশি নয়) দীর্ঘ) অক্ষরেখার ক্রমটি একটি নতুন লাইন চরিত্র দ্বারা সমাপ্ত, সুতরাং sedএটির মতো পাঠ্য ইউটিলিটির আচরণটি অনির্ধারিত এবং বাস্তবে বাস্তবায়ন থেকে বাস্তবায়নের ক্ষেত্রে পরিবর্তিত হয়।

কিছু sedবাস্তবায়ন শেষ পংক্তির পরে সেই উত্সাহী চরিত্রটিকে বাতিল করে দিত।

আফাইক, xmlফাইলগুলি বোঝানো হচ্ছে টেক্সট ফাইল, সুতরাং এর অর্থ sedএটি আপনার জন্য ঠিক করা হয়েছে।

আপনার যদি দরকার হয় সেই ফাইলটি কোনও নতুন লাইন চরিত্রের শেষ না হয়, তবে আপনি perlবা অন্যান্য সরঞ্জামগুলি ব্যবহার করতে পারেন যা অ-পাঠ্য ডেটা মোকাবেলা করতে পারে।

perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'

1
সসীম সম্পর্কে newline হয় যদি আপনি নল আপনার আশা, সহায়ক sedঅন্য কোন মান ইউনিক্স ইউটিলিটি মধ্যে আউটপুট। সত্যিই, আমি বছরের পর বছর ধরেsed এটি লক্ষ্য করিনি , যেহেতু বোর্ন শেল কমান্ডের বিকল্পগুলি চূড়ান্তভাবে চূড়ান্ত নিউলাইনটি ছাঁটাই করে, যদি তা থাকে। কিন্তু হয় বার যখন আপনি স্পষ্টভাবে এটি চাই না; উদাহরণস্বরূপ , এক্স ক্লিপবোর্ডের পাঠ্যের সাথে ম্যানিপুলেট করা । এফওয়াইআই, জিএনইউ সেড, উপলভ্য থাকলে, এই এসई উত্তরে বর্ণিত বিকল্প হিসাবে এটি ব্যবহার করে যদি একটি টার্মিনেটিং নিউলাইন যোগ করে না । $(sed 's/bas/replac/' <<<'basement')sedp-n
22-28 এ TheDudeAbides

0

এখানে একটি ফাইল ব্যবহার করে চূড়ান্ত নিউলাইন সরানোর একটি উপায় dd:

printf "" | dd  of='/path/to/file' seek=<filesize_in_bytes - 1> bs=1 count=1

ফাইলটি কোনও নিউলাইন দিয়ে শেষ হতে পারে কিনা তা পরীক্ষা করতে আপনি ব্যবহার করতে পারেন:

tail -c 1 /path/to/file | tr -dc '\n' | wc -c

এবং বাইট ব্যবহারে ফাইলের আকার পেতে:

wc -c < /path/to/file

0

এই অনুযায়ী , AIX ম্যানুয়াল আইবিএম এর tailআছে -reverse - যা বেশ শান্ত দেখায়। যতক্ষণ না আপনার ফাইলটি 20KB এর নীচে থাকে নিম্নলিখিত নীচের কাজ করা উচিত:

tail -r <file | dd bs=1 skip=1 | tail -r >file.new
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.