অ-ইন্টারেক্টিভভাবে ফাইলগুলি কীভাবে সম্পাদনা করবেন (যেমন পাইপলাইনে)?


24

আমি পাইপলাইন ইনপুটটিতে পাস করা ফাইলগুলি অ-ইন্টারেক্টিভ উপায়ে ভিআইএম ব্যবহার করে সম্পাদন করতে চাইছি বা জায়গায় জায়গায় ফাইলগুলি সম্পাদনা করতে চাই (অনুরূপ sed)।

কয়েকটি উদাহরণ ব্যবহার করে sed:

$ sed -i'.bak' s/foo/test/g file   # Edit file in-place.
$ cat file | sed s/foo/test/g      # Parse file in pipeline.

তবে আমি এখানে পড়তে পারি , এটি:

sedএকটি হল এস tream ইডি itor, না একটি ফাইল এডিটর। তবুও, ফাইলগুলি সম্পাদনা করার চেষ্টা করার জন্য সর্বত্র লোকেরা এটির অপব্যবহার করে। এটি ফাইলগুলি সম্পাদনা করে না।

দ্বিতীয়ত কিছু বিকল্প যেমন ইন-প্লেস এডিটিং ( -i) পোর্টেবল।

কীভাবে একই কার্যকারিতা উইম এ অর্জন করা যায়?


আমি মনে করি আপনি fileআপনার দ্বিতীয় কমান্ডলাইন থেকে দ্বিতীয়টি বাদ দিতে পারেন ।
জোয়েটউইডাল

@ জোয়েটউইডল সম্পন্ন
কেনরব

উত্তর:


33

অ-ইন্টারেক্টিভভাবে ব্যবহার করে ফাইল সম্পাদনা করতে ex( viএর জন্য ভিজ্যুয়াল মোড ex), আপনি ব্যবহার করতে পারেন +{command}বা -c {command}পরামিতি যা আপনাকে প্রথম ফাইলটি পড়ার পরে vi কমান্ড সম্পাদন করতে দেয়।

exএকটি প্রমিত কম্যান্ড-লাইন (অনুরূপ এডিটর ed)।

এছাড়াও রয়েছে vipe(একটি ভিম কমান্ড পাইপ সম্পাদক) ব্যবহার করা উচিত যা moreutilsপ্যাকেজের অংশ এবং এটি আপনাকে একটি ইউনিক্স পাইপলাইনের মাঝখানে আপনার সম্পাদককে চালাতে এবং প্রোগ্রামগুলির মধ্যে যে পাইপযুক্ত ডেটা সম্পাদনা করতে সহায়তা করে।

উদাহরণ

পাইপ ব্যবহার করে সাধারণ স্ট্যান্ডার্ড ইনপুট এবং আউটপুট এই শেল সিনট্যাক্স দ্বারা অর্জন করা যেতে পারে:

$ ex -sc'%p|q!' <(echo Example)
$ echo Example | ex -sc'%p|q!' /dev/stdin

প্রতিস্থাপনের পরে ফাইলটি কীভাবে প্রিন্ট করা যায় তা এখানে সাধারণ উদাহরণ:

$ ex /etc/hosts +%s/127/128/ge -sc'%p|q!'

জায়গায় জায়গায় ফাইল সম্পাদনা করার জন্য আরও উদাহরণ:

$ ex +'%s/127/128/g' -cswq file
$ ex -sc '%s/olddomain\.com/newdomain.com/g|x' file
$ printf '%s\n' 'g/olddomain\.com/s//newdomain.com/g' w q | ex -s file
$ ex -s "$file" <<< $'g/old/s//new/g\nw\nq'
$ ex -sc 'argdo %s/old/new/ge|x' ./**
$ find . -type f -exec ex -sc '%s/old/new/g|x' {} \;

-s {scriptin}কমান্ডগুলি ফাইল থেকে লোড হওয়ার ফলে আপনি এটিও ব্যবহার করতে পারেন , উদাহরণস্বরূপ:

$ printf "%s\n" '%s/foo/test/ge' 'wq' > cmds.vim
$ vim -s cmds.vim -es file

বা I / O পুনঃনির্দেশ ব্যবহার করে:

$ vim file < cmds.vim

একটি ফাইল সম্পাদনা করতে এবং অন্যটিতে পরিবর্তনগুলি সংরক্ষণ করতে, নিম্নলিখিত উদাহরণগুলি দেখুন:

$ ex +%s/127/128/g -sc'wq! new_file' /etc/hosts
$ cat /etc/hosts /etc/fstab | vim - -es '+:%s/foo/test/g' '+:wq! file3'

আরও ব্যবহারিক উদাহরণ।

আরপিএম স্পেসিফিকেশন থেকে বাস্তব লাইভ উদাহরণ :

vim -E -s Makefile <<-EOF
   :%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
   :%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
   :%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
   :update
   :quit
EOF

এইচটিএমএল ট্যাগগুলি আহরণ করা হচ্ছে :

ex -s +'bufdo!/<div.*id=.the_div_id/norm nvatdggdG"2p' +'bufdo!%p' -cqa! *.html

এক্সএমএল ট্যাগগুলি সরানো হচ্ছে :

ex -s +'%s/<[^>].\{-}>//ge' +%p +q! file.txt

শিরোনাম থেকে স্টাইল ট্যাগ সরানো এবং পার্সড আউটপুট মুদ্রণ:

curl -s http://example.com/ | ex -s +'/<style.*/norm nvatd' +%p -cq! /dev/stdin

একাধিক জটিল নিয়মের সাথে html পার্স করুন :

ex -V1 $PAGE <<-EOF
  " Correcting missing protocol, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
  %s,'//,'http://,ge
  %s,"//,"http://,ge
  " Correcting relative paths, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
  %s,[^,]\zs'/\ze[^>],'http://www.example.com/,ge
  %s,[^,]\zs"/\ze[^>],"http://www.example.com/,ge
  " Remove the margin on the left of the main block. "
  %s/id="doc_container"/id="doc_container" style="min-width:0px;margin-left : 0px;"/g
  %s/<div class="outer_page/<div style="margin: 0px;" class="outer_page/g
  " Remove useless html elements. "
  /<div.*id="global_header"/norm nvatd
  wq " Update changes and quit.
EOF

আরও উদাহরণ:


আরো দেখুন:



5
এটি একটি ইউইউসি ; কেবল vim '+:0,$s/foo/test/g' '+:wq! file2' file1পরিবর্তে ব্যবহার করুন।
ডোরকনব

2
মনে রাখবেন যে এই উদাহরণগুলির মধ্যে কমপক্ষে কয়েকটি উদাহরণ পসিক্স-অনুগত নয় bufdo। যদিও ভার্চ ভার্চুয়ালি যে কোনও জায়গায় ইনস্টল করা আছে, এটি জেনে রাখা উচিত যে আপনি কেবলমাত্র পসিক্স-সম্মতিযুক্ত বৈশিষ্ট্যগুলি ব্যবহার করে ফাইল সম্পাদনা স্ক্রিপ্ট করতে পারবেনex
ওয়াইল্ডকার্ড

এই প্রশ্ন ও উত্তরটি আমাকে প্রথমে exএটি অনুসন্ধান এবং সত্যই শিখতে অনুপ্রাণিত করেছিল। ধন্যবাদ. এই বিষয় উপর কিছু আরো পড়ার (সম্পূর্ণ প্রকাশ: আমি এই লিখেছিলেন;) হল: সঙ্গে প্রতি চার লাইন reversingex , এবং ব্যবহার -cবিকল্প । আপনি চাইলে আপনার নীচের লিঙ্ক তালিকায় এগুলি যুক্ত করতে পারেন। :)
ওয়াইল্ডকার্ড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.