একক কমান্ড দিয়ে একাধিক পাঠ্য ফাইল কীভাবে সম্পাদনা করবেন?


18

আমি একাধিক পাঠ্য ফাইলের প্রথম লাইনটি সরিয়ে অন্য লাইনের সাথে এটি প্রতিস্থাপন করতে চাই। টার্মিনালটি ব্যবহার করে এটি করার কোনও উপায় আছে?

আমি জানি কীভাবে ভিএম ব্যবহার করতে হয়, এটির সাথে এটি স্বয়ংক্রিয় করার কোনও উপায় আছে? আমি এটি ম্যানুয়ালি করা এড়াতে চাই (প্রতিটি ফাইল পৃথকভাবে সম্পাদনা করার ক্ষেত্রে)।

সম্ভব হলে আমি নতুন লাইব্রেরি ইনস্টল করা এড়াতে চাই (বিশেষত এমন কোনও কিছুর জন্য যা আমি খুব সাধারণ বলে মনে করি - তবে আমি ভুল হতে পারি)।

আগাম ধন্যবাদ!

উত্তর:


21

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

sed -i.bak '1s/^.*$/new line/' *.txt

এটি .txtবর্তমান ডিরেক্টরিতে সমস্ত ফাইলের প্রথম লাইনটি পাঠ্যের সাথে প্রতিস্থাপন করবে new line, আপনার প্রয়োজন মেটাতে এটি পরিবর্তন করবে।

এছাড়াও মূল ফাইলগুলি .bakএক্সটেনশনের সাহায্যে ব্যাক আপ করা হবে , আপনি যদি না চান তবে এটি ব্যবহার করুন:

sed -i '1s/^.*$/new line/' *.txt

ধন্যবাদ! sedআসলে আমি যা খুঁজছিলাম!
টমটসাগাক

@ টমটসাগক খুশী হয়ে আমি সাহায্য করতে পারি :)
হিমাইল

11

ভাল, vimনিজেই ব্যবহার :

vim -Nesc 'bufdo call setline(1,"This is the replacement.") | wq' file1 file2 ...

এটি কী করে:

  • setline (n, text), ভাল, একটি ফাংশন যা লাইন সেট nকরে text
  • call ফাংশন কল প্রয়োজন।
  • bufdo বাফারগুলি জুড়ে একটি কমান্ড পুনরাবৃত্তি করতে ব্যবহৃত হয় (কোনও ব্যাপ্তি ছাড়াই এটি সমস্ত বাফারে কাজ করে)।
  • wqবাফার সংরক্ষণ করে এবং ছেড়ে দেয়। পরবর্তী বাফারে যাওয়ার আগে আমাদের এটি করা দরকার, সুতরাং এই callকমান্ডটি ব্যবহার করে কমান্ডটিতে শৃঙ্খলাবদ্ধ |
  • -c cmdরান cmdপ্রথম বাফার লোড পর কমান্ড-মোড কমান্ড।
  • Nes নো-সামঞ্জস্যপূর্ণ, নীরব, প্রাক্তন মোড চালু করে, যা অ ইন্টারেক্টিভ প্রক্রিয়াজাতকরণের জন্য ভাল।

উপকারিতা:

  • setlineপাঠ্য সামগ্রীকে কিছু হতে পারে - একটি &একটি sedপ্রতিস্থাপন পাঠ্য অনিচ্ছাকৃত প্রভাব থাকতে পারে।

sedব্যবহার করা অনেক সহজ বলে মনে হচ্ছে, তবে এটি সত্যিই দুর্দান্ত যে vimএকই কাজ করতে পারে! ধন্যবাদ আপনার উত্তরের জন্য অনেক!
টমটস্যাগ্ক

@ টমটসাগ্ক ভাল, আমি কেবল উদাহরণ দিয়ে বলতে চেয়েছিলাম আপনি একাধিক ফাইল ( bufdo) এ কীভাবে কাজ করতে পারেন । আপনার ইতিমধ্যে ফাইলগুলি খোলা আছে এবং ... এবং এর বিকল্প দেখানোর জন্য বিবেচনা করুন 1s/foo/bar/
মুড়ু

Awesoming !!! <3_ <3
ক্যাম্পা

3

কয়েকটি অন্যান্য বিকল্প:

  • awk(জিএনইউর তুলনামূলকভাবে নতুন সংস্করণ প্রয়োজন awk)

    $ awk -i inplace -vline="new line" '(FNR==1){print line; next}1;' *.txt
    
  • পার্ল / শেল

    $ for f in *txt; do
        perl -i -lne '$.==1 ? print "new line" : print' "$f"
      done
    
  • শেল / coreutils

    $ for f in *txt; do 
        ( echo "new line"; tail -n+2 "$f" ) > foo && mv foo "$f"; 
      done
    

2

আপনার অনুরোধ অনুসারে এই স্ক্রিপ্টটি করবে, পরিবর্তিত ফাইলগুলিকে নতুন ডিরেক্টরিতে প্রকৃত মূলগুলি পরিবর্তন না করে রেখে।

d=/tmp/cooked
mkdir $d
for f in *  #will match all files in current directory; adjust as desired
do
  echo "This is the new 1st line" > /${d}/${f}
  sed 1d ${f} >> /${d}/${f}
done

আমি ধীরে ধীরে উত্তর দিচ্ছিলাম (আমার কোডটি পরীক্ষিত) ... এবং আমি হিমাইলের সমাধানটি আরও ভাল পছন্দ করি!
চার্লস বোলিং

0

ব্যবহার gawk

gawk -i inplace 'FNR==1 {$_="your_replacement"}; {print}' *.txt

উদাহরণ

% cat foo.txt 
1
2
3
4

% cat bar.txt 
1
2
3
4

% gawk -i inplace 'FNR==1 {$_="your_replacement"}; {print}' *.txt

% cat foo.txt                                                    
your_replacement
2
3
4

% cat bar.txt                                                    
your_replacement
2
3
4

0

জেডিট: আমি এটি ভর-সন্ধান এবং প্রতিস্থাপনের জন্য ব্যবহার করি। এটি RegEx - নিয়মিত এক্সপ্রেশন ব্যবহার করার ক্ষমতা সহ শক্তিশালী। আপনি কোনও ডিরেক্টরিতে ফাইলগুলি পরিচালনা করতে পারেন, ফাইল এক্সটেনশনগুলি নির্দিষ্ট করতে পারেন, যেমন, ".html" এবং আরও অনেক কিছু। এবং, আপনি কোনও জিইআইতে প্রসঙ্গে প্রার্থীর পরিবর্তনের লোকালটি দেখতে পারেন। jEdit দুর্দান্ত।

উবুন্টুর সফটওয়্যার সেন্টারের মাধ্যমে jEdit উপলব্ধ।


0

লেজ এবং বিড়ালের আদেশগুলি এটি সহজেই করতে পারে:

tail -n +1 $file > tmpfile
cat newfirstline tmpfile >$file

এগুলিকে উপযুক্ত লুপে মুড়ে রাখুন এবং সম্ভবত হার্ড-কোডেড অস্থায়ী ফাইলের নামের পরিবর্তে সঠিক এবং ধার্মিক অস্থায়ী ফাইল ব্যবহার করুন। আমি বিশ্বাস করি বাশ এবং অন্যান্য শেলের অস্থায়ী ফাইল তৈরির জন্য একটি বাক্য গঠন রয়েছে।

আর্গুমেন্টের প্লাস চিহ্ন রয়েছে কিনা তার উপর নির্ভর করে লেজের -n বিকল্পের দুটি ব্যাখ্যা রয়েছে। যদি এটিতে একটি প্লাস চিহ্ন থাকে তবে এর অর্থ প্রদত্ত লাইন নম্বর থেকে শুরু করে ফাইলের লেজটি দেখানো হবে । অন্যথায় সংখ্যাটি শেষ লাইন সহ লাইনগুলির সংখ্যা, সেই লেজটি আউটপুট দেওয়ার কথা।

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