ব্যাশ ব্যবহার করে কোনও ফাইলের প্রতিটি লাইনের পরে আমি কীভাবে একটি স্ট্রিং যুক্ত করব? এটি সেড কমান্ড ব্যবহার করে করা যেতে পারে, যদি তাই হয় কীভাবে?
ব্যাশ ব্যবহার করে কোনও ফাইলের প্রতিটি লাইনের পরে আমি কীভাবে একটি স্ট্রিং যুক্ত করব? এটি সেড কমান্ড ব্যবহার করে করা যেতে পারে, যদি তাই হয় কীভাবে?
উত্তর:
যদি আপনার প্যারামিটারের sed
মাধ্যমে সম্পাদনা করার অনুমতি দেয় -i
:
sed -e 's/$/string after each line/' -i filename
যদি তা না হয় তবে আপনাকে একটি অস্থায়ী ফাইল তৈরি করতে হবে:
typeset TMP_FILE=$( mktemp )
touch "${TMP_FILE}"
cp -p filename "${TMP_FILE}"
sed -e 's/$/string after each line/' "${TMP_FILE}" > filename
sed -e 's/^/string after each line/' -i filename
$ মানে লাইন শেষ end ^ মানে লাইনের শুরু।
sed 's/^/string after each line/'
যা আমি প্রত্যাশা করি তা করে (প্রতিটি লাইনে প্রিপেন্ড করে) তবে sed 's/^/string after each line/'
তা না করে (এটি আমার পরিশিষ্টের স্ট্রিংয়ের সাথে পুরো লাইনটি প্রতিস্থাপন করে)। কি দেয়? @ টমডিজিসি কোন ধারণা?
আমি ব্যবহার পছন্দ করা awk
। যদি কেবল একটি কলাম থাকে তবে ব্যবহার করুন $0
, অন্যথায় এটি শেষ কলামের সাথে প্রতিস্থাপন করুন।
একমুখী,
awk '{print $0, "string to append after each line"}' file > new_file
অথবা এটা,
awk '$0=$0"string to append after each line"' file > new_file
NR
পরিবর্তনশীল ব্যবহার করতে পারেন :awk '{print $0, NR}'
sed 's/ //g'
এটি আমার প্রয়োজনীয়তার জন্য কাজ করেছে, তবে এটি প্রতিটি লাইনে স্থান সরিয়ে ফেলবে, এক লাইনে কী g
এবং সর্বত্র যে বিকল্পের বিকল্প তা প্রমাণ করবে ।
,
মত {print $0"string to append after each line"}
।
আপনার যদি এটি থাকে তবে ল্যাম (স্তরিত) ইউটিলিটি এটি করতে পারে, উদাহরণস্বরূপ:
$ lam filename -s "string after each line"
খাঁটি পসিক্স শেল এবং sponge
:
suffix=foobar
while read l ; do printf '%s\n' "$l" "${suffix}" ; done < file |
sponge file
xargs
এবং printf
:
suffix=foobar
xargs -L 1 printf "%s${suffix}\n" < file | sponge file
ব্যবহার join
:
suffix=foobar
join file file -e "${suffix}" -o 1.1,2.99999 | sponge file
শেল সরঞ্জাম ব্যবহার paste
, yes
, head
& wc
:
suffix=foobar
paste file <(yes "${suffix}" | head -$(wc -l < file) ) | sponge file
নোট করুন যে আগে paste
একটি ট্যাব চর সন্নিবেশ করানো হয় $suffix
।
অবশ্যই sponge
কোনও টেম্পল ফাইলের সাথে প্রতিস্থাপন করা যেতে পারে, পরে mv
মূল ফাইলের উপর দিয়ে কিছু উত্তর উত্তর হিসাবে ...
sed
সংস্থানগুলি খুব সীমাবদ্ধ না হলে এগুলির কোনওটিই পছন্দসই নয় ।
sed
যেমন একটি সহজ কাজের জন্য প্রয়োজন হয় না।
আমি পছন্দ echo
। খাঁটি বাশ ব্যবহার:
cat file | while read line; do echo ${line}$string; done
শেড কিছুটা কুরুচিপূর্ণ, আপনি এটিকে মার্জিতভাবে এটি করতে পারেন:
hendry@i7 tmp$ cat foo
bar
candy
car
hendry@i7 tmp$ for i in `cat foo`; do echo ${i}bar; done
barbar
candybar
carbar
cat foo
; প্রতিধ্বনি করুন} {i} বার; ফুবার বারবার বাজবার করেছেন তবে কিছু পরীক্ষার পরে আমি আমার যুক্তি সম্পর্কে ভুল হতে পারি তবে ডেনিস ঠিকই বলেছেন
echo "foo bar" | (for i in `cat`; do echo ${i}bar; done)
ইনপুটটি 1 লাইন হওয়া সত্ত্বেও 2 টি লাইন প্রিন্ট করে foo bar
(এবং cat
কোনও ফাইলের পরিবর্তে স্টিডিন থেকে পড়া এটির জন্য কোনও পার্থক্য রাখে না)।
touch
অস্থায়ী ফাইল? এবং আমিsed
কমান্ডটি শর্ত সাপেক্ষে করব সাফল্যের উপরcp
বা মূলটি হারাতে পারে on