ফাইলের শেষে আমি কীভাবে নিউলাইন চরিত্রটি সরিয়ে ফেলব?


34

আমাকে নিউলাইন চরিত্র সম্পর্কে পরিষ্কার করুন:

$ echo Hello > file1 ; cat file1
Hello
$ echo -n  Hello > file2 ; cat file2
Hello$ 

এখানে আপনি দেখতে পাচ্ছেন যে file1শেষের দিকে নিউলাইন চরিত্র file2রয়েছে যদিও নেই।

এখন ধরুন আমি একটি করেছি file:

$ cat file
Hello
Welcome to
Unix
$

এবং আমি and Linuxফাইলের শেষে যুক্ত করতে চাই , তারপরে echo " and Linux" >> fileনতুন লাইনে যুক্ত হবে। তবে আমি শেষ লাইনে চাইUnix and Linux

সুতরাং, কাজ করার জন্য আমি ফাইলের শেষে নিউলাইন চরিত্রটি মুছে ফেলতে চাই। সুতরাং ফাইলের শেষে আমি কীভাবে নিউলাইন চরিত্রটি সরিয়ে ফেলব?


6
এটি অপসারণ করবেন না, কেবল একটি পাঠ্য সম্পাদক ব্যবহার করুন। sed '$s/$/ and linux/'
123

উত্তর:


28

যদি আপনি যা করতে চান তা সর্বশেষ লাইনে পাঠ্য যুক্ত করা হয় তবে সেডের সাহায্যে এটি খুব সহজ। $আপনি যোগ করতে চান এমন পাঠ্য দ্বারা (রেখার শেষের সাথে প্যাটার্নের মিলগুলি) প্রতিস্থাপন করুন, কেবলমাত্র রেঞ্জের লাইনে $(যার অর্থ শেষ লাইন)।

sed '$ s/$/ and Linux/' <file >file.new &&
mv file.new file

লিনাক্স এ যা সংক্ষিপ্ত করা যেতে পারে

sed -i '$ s/$/ and Linux/' file

আপনি যদি কোনও ফাইলের সর্বশেষ বাইটটি সরাতে চান তবে লিনাক্স (আরও সুনির্দিষ্টভাবে জিএনইউ কোর্টিল) truncateকমান্ডটি সরবরাহ করে যা এটি খুব সহজ করে তোলে।

truncate -s -1 file

এটি করার একটি পসিক্স উপায় রয়েছে dd। প্রথমে ফাইলের দৈর্ঘ্য নির্ধারণ করুন, তারপরে এটিকে একটি বাইট কম করে কেটে দিন।

length=$(wc -c <file)
dd if=/dev/null of=file obs="$((length-1))" seek=1

মনে রাখবেন যে এই দু'টিই নিঃশর্তভাবে ফাইলের শেষ বাইট ছিন্ন করে। আপনি প্রথমে এটি একটি নিউলাইন পরীক্ষা করতে চাইতে পারেন:

length=$(wc -c <file)
if [ "$length" -ne 0 ] && [ -z "$(tail -c -1 <file)" ]; then
  # The file ends with a newline or null
  dd if=/dev/null of=file obs="$((length-1))" seek=1
fi

9
অনেক ভালো একটি trailing সম্পর্কে newline দূর করার উপায় নেই perl -pi -e 'chomp if eof' myfile। তুলনা করা truncateবা ddএটি আপনাকে কোনও ভাঙা ফাইল দিয়ে ছেড়ে দেবে না যদি myfileবাস্তবে কোনও পেছনের নিউলাইন না থাকে।
হাই-এঞ্জেল

2
@ হাই-অ্যাঞ্জেল আমি উত্তর হিসাবে এটি লেখার পরামর্শ দিতে পারি? আমি মনে করি এটি খুব ভাল উত্তর হবে।
সাইমন ফারসবার্গ

@ সিমোনফারসবার্গ ধন্যবাদ, সম্পন্ন
হাই-এঞ্জেল

17

যদিও, আপনি লাইন থেকে নতুনলাইন চরিত্রটি মুছে ফেলতে পারবেন tr -d '\n':

$ echo -e "Hello"
Hello
$ echo -e "Hello" | tr -d '\n'
Hello$

নিম্নলিখিত সহজ উপায় ব্যবহার করে আপনি ফাইলের শেষে নিউলাইন চরিত্রটি সরাতে পারেন:

  1. head -c -1 file

    থেকে man head:

    -c, --bytes=[-]K
              print the first K bytes of each file; with the leading '-',
              print all but the last K bytes of each file
  2. truncate -s -1 file

    থেকে man truncate:

    -s, --size=SIZE
              set or adjust the file size by SIZE

    SIZE is an integer and optional unit (example: 10M is 10*1024*1024).
    Units are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).
    
    SIZE  may  also be prefixed by one of the following modifying characters: 
    '+' extend by, '-' reduce by, '<' at most, '>' at least, '/' round down to multiple of, '%' round up to multiple of.

হয় head -c -1 file | tee fileনিরাপদ? teeশুরু করার আগে কি ফাইল কেটে যাবে না ?
ইরুভর

1
@ 1_CR আসলেই। পাইপের দুটি দিক সমান্তরালভাবে শুরু হয়, কে রেস জিতবে তা ব্যাপার it's যেহেতু teeকেবল ফাইলটি খুলতে হবে, যেখানে headএর বিষয়বস্তুটি পড়তে হবে এবং লিখতে teeহবে , কখনও কখনও খুব ছোট ফাইল বাদে রেসটি জিততে পারে।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

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

9

আপনি পার্ল দিয়ে এটি অর্জন করতে পারেন:

perl -pi -e 'chomp if eof' myfile

তুলনায় truncateবা ddএটি না হলে আপনাকে কোনও ভাঙা ফাইল দিয়ে ছেড়ে দেবে না যদি myfileআসলে কোনও পেছনের নিউলাইন না থাকে।

(উত্তরটি মন্তব্য থেকে তৈরি করা হয়েছে, এবং এই উত্তরের ভিত্তিতে )


ধন্যবাদ! অপসারণের এই শর্তাধীন পদ্ধতিটি নতুন লাইনের পিছনে রয়েছে।
xer0x

2

ফাইলটির sedশেষ ( $) লাইনটিতে এখানে একটি উপায় রয়েছে , .*"আপনার সাথে যা কিছু মিলেছে" তার পরে "এবং লিনাক্স" দিয়ে কিছু এবং সমস্ত কিছু ( ) অনুসন্ধান এবং প্রতিস্থাপন করুন :

sed '$s/\(.*\)/\1 and Linux/' file

আইজ্যাকের সৌজন্যে একটি আরও সহজ সমাধান হ'ল:

sed '$s/$/ and Linux/' file

এটি প্রদত্ত পাঠ্যটির সাথে (প্রতীকী) শেষ প্রান্তের প্রতিস্থাপন করে।


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