একটি পাঠ্য ফাইলে প্রতিটি লাইনে ## প্রস্তুত করুন


30

আমি নিয়মিত পাঠ্য ফাইলে সমস্ত লাইনে হ্যাশ যুক্ত করতে চাই। টার্মিনাল এবং জিইউআই উভয়ের ব্যবহারের সাথে আমি ভাল — আমার কেবল এটি সম্পন্ন করা দরকার।

উত্তর:


50

আপনি এটি করতে ব্যবহার করতে পারেন sed:

sed -i.bak 's/^/##/' file

এটি লাইন ( ^) এর শুরুতে প্রতিস্থাপন করে ##

সঙ্গে -i.bakসুইচ, sedইন-জায়গা ফাইল সম্পাদনা কিন্তু এক্সটেনশনের সাথে কোনো ব্যাকআপ অনুলিপি তৈরি করে .bak


1
+1 এই ব্যাকআপ পদ্ধতিটি আমি প্রথমবার মুখোমুখি। আমি সবসময় একটি ইনলাইন সরাসরি প্রতিস্থাপন হয়নি: sed 's/^/##/' -i file। এই ক্ষেত্রে, এটি পছন্দ করা হবে যেহেতু এটি ভুল হতে পারে না। অন্যান্য ক্ষেত্রে, এই কমান্ডটি diff -u file.bak fileপার্থক্যগুলি দেখার জন্য একত্রিত করা যেতে পারে (যদি প্রয়োজন হয় তবে এটিটি পাইপ করুন less)। যদি এটি কাজ করার বিষয়ে নিশ্চিত হয় তবে ব্যাকআপটি সরানো যেতে পারে। অন্যথায় এটি একটি সাধারণ দিয়ে পুনরুদ্ধার করা যেতে পারে mv file.bak file
লেকেনস্টেইন

1
মার্জিত। আমি এমন কিছু নিয়ে ভাবছিলাম sed 's/^\(.*\)$/##\1/', তবে এটি বেশ সুন্দর।
ব্যবস্থা করুন

খুব সুন্দর .. আমি ভিমকে এটি করার পরামর্শ দেওয়ার কথা ভাবছিলাম ...
সতীশ

এটি আমাকে একটি ব্লক তালিকার ফাইলটি রূপান্তর করতে সহায়তা করেছে :) আপনাকে ধন্যবাদ 1+
নীল

8

পার্ল ব্যবহার করে এই সমস্যার সমাধান এখানে দেওয়া হল

perl -e 'while (<>) {print "##$_"}' < infile > outfile

2
-pসুইচ এছাড়াও দরকারী হল: perl -pe 's/^/##/' infile > outfile। (এর রয়েছে -i[extension]ইন-জায়গা লক্ষ্য ফাইল প্রতিস্থাপন জন্য সুইচ।) Perldoc.perl.org/perlrun.html#%2a-p%2a
Jukka Matilainen


4

এখানে একটি ব্যাপার bashউপায়:

while read -r; do printf '##%s\n' "$REPLY"; done < infile > outfile

( ইন bashশেল , দৌড়ানো read -rঅন্য কোন আর্গুমেন্ট সহ মত কাজ করে IFS= read -r REPLY।)

এটি স্টাইলিস্টিকভাবে বেভ_35 এর পার্ল সলিউশন দ্বারা অনুপ্রাণিত , যা আমি স্বীকার করি যে বিশাল ফাইলগুলির জন্য সম্ভবত খুব দ্রুত সঞ্চালিত হয়, যেহেতু perlপাঠ্য প্রক্রিয়াজাতকরণের ক্ষেত্রে এটি শেলের চেয়ে আরও বেশি দক্ষ হবে বলে আশা করা যায়।


3

sed -iপসিক্স-স্ট্যান্ডার্ড নয়, সুতরাং আপনি যদি পিউরিস্ট হন তবে আপনি এটি ব্যবহার করতে চাইবেন ed:

printf ",s/^/##/\nw\nq" | ed -s file.txt

3

perlঅন্যত্র উপস্থাপিতের চেয়ে এখানে সহজ উপায়:

perl -pi -e 'print "##"' YOURFILEHERE

এটি (আব) এই সত্যটি ব্যবহার করে যা perl -pপ্রদত্ত কমান্ডটি কার্যকর করার পরে লাইনটি মুদ্রণ করে -e


0

আপনি এক্স মোডে ভিম ব্যবহার করতে পারেন:

ex -sc '%s/^/##/|x' file
  1. % সমস্ত লাইন নির্বাচন করুন

  2. s বিকল্প

  3. x সংরক্ষণ করেন এবং বন্ধ করেন


0

পাইথনের ম্যাপিং ফাংশন এবং স্টিডিন পুনর্নির্দেশের সাহায্যে করা যেতে পারে:

$ cat input.txt                                                                                                          
lorem ipsum
quick brown fox
hello world
$ python -c 'import sys;print "".join(map(lambda x: "##"+x,sys.stdin.readlines()))'  < input.txt                         
##lorem ipsum
##quick brown fox
##hello world

নতুন ফাইলে আউটপুট সংরক্ষণ করুন এবং আসল পরিবর্তে এটি ব্যবহার করুন

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