ফাইলের শুরুতে একটি পাঠ্য কীভাবে সন্নিবেশ করবেন?


213

এখনও অবধি আমি কোনও ফাইলের শুরুতে কীভাবে একটি লাইন যুক্ত করব তা সন্ধান করতে পেরেছি তবে এটি আমি চাই ঠিক তা নয়। আমি এটি একটি উদাহরণে প্রদর্শন করব

ফাইল সামগ্রী

some text at the beginning

ফলাফল

<added text> some text at the beginning

এটি অনুরূপ তবে আমি এটি দিয়ে কোনও নতুন লাইন তৈরি করতে চাই না ...

sedসম্ভব হলে আমি এটি করতে চাই ।


এখানে কিছু আপনার জন্য কাজ করে? stackoverflow.com/questions/54365/… - আপনাকে ব্যবহার করার দরকার নেই sed
wkl

উত্তর:


314

sed কোনও ঠিকানায় কাজ করতে পারে:

$ sed -i '1s/^/<added text> /' file

1sআপনি এখানে প্রতিটি উত্তরে এই যাদুটি দেখতে পান? লাইন ঠিকানা!

<added text>প্রথম 10 লাইনে যুক্ত করতে চান ?

$ sed -i '1,10s/^/<added text> /' file

অথবা আপনি ব্যবহার করতে পারেন Command Grouping:

$ { echo -n '<added text> '; cat file; } >file.new
$ mv file{.new,}

67
আসলে একটি নতুন লাইন সন্নিবেশ করতে: সেড -i '1s / ^ / <যোগ করা পাঠ্য> file n /' ফাইল
jslatts

1
কেন আমি ব্যবহার করছি? মানুষের উপর এটি বলে যে এটি প্রত্যয়ের জন্য। linux.die.net/man/1/sed
endrigoantonini

-i এর স্থানে দাঁড়িয়ে, আপনি ওভাররাইটের চেয়ে একটি অনুলিপি তৈরি করতে -i এর প্রত্যয় যুক্ত করতে পারেন। -i.new .new দিয়ে শেষ করে একটি নতুন ফাইল তৈরি করবে, তবে কেবল -i সরাসরি ফাইলটি সম্পাদনা করব।
জে কামাত

3
নোট করুন যে সেডটি খালি ফাইলে কাজ করবে না - আফাক্ট সেড 0-দৈর্ঘ্যের ইনপুট দিয়ে মোটেও কিছুই করা যায় না।
jthill

2
এই সমাধানের ত্রুটিটি হ'ল ফাইলটি খালি থাকলে এটি পাঠ্য যুক্ত করে না।
DBedrenko

41

আপনি যদি কোনও ফাইলের শুরুতে একটি লাইন যুক্ত করতে চান তবে আপনাকে \nউপরের সেরা সমাধানটিতে স্ট্রিংয়ের শেষে যুক্ত করতে হবে ।

সেরা সমাধানটি স্ট্রিং যুক্ত করবে, তবে স্ট্রিংয়ের সাথে এটি কোনও ফাইলের শেষে একটি লাইন যুক্ত করবে না।

sed -i '1s/^/your text\n/' file

27

ফাইলটি যদি কেবল একটি লাইন হয় তবে আপনি এটি ব্যবহার করতে পারেন:

sed 's/^/insert this /' oldfile > newfile

যদি এটি এক লাইনের বেশি হয়। অন্যতম:

sed '1s/^/insert this /' oldfile > newfile
sed '1,1s/^/insert this /' oldfile > newfile

আমি উত্তরোত্তরটি অন্তর্ভুক্ত করেছি যাতে আপনি জানেন যে কীভাবে রেখার ব্যাপ্তি করতে হয়। এই দু'টিই আপনার সন্নিবেশ করতে চান এমন পাঠ্য সহ তাদের প্রভাবিত লাইনে শুরুর লাইন চিহ্নিতকারীকে "প্রতিস্থাপন করুন"। আপনি (আপনার sedআধুনিক যথেষ্ট ধরে নিচ্ছেন ) ধরে নিতে পারেন:

sed -i 'whatever command you choose' filename

ইন-প্লেস এডিটিং করতে।


11

তুমি ব্যবহার করতে পার cat -

printf '%s' "some text at the beginning" | cat - filename

6
এটি কেবলমাত্র ফাইলের সামগ্রী অনুসরণ করে পাঠ্যকে আউটপুট দেয় তবে এটি ফাইলটিকে মোটেই পরিবর্তন করে না।
আডাইফোন

এটি একটি ভাল সমাধান, আমি কেন কোনও উপকার পেলাম না তা ভাবছি। এই আমার ভাল স্যার। এছাড়াও, কেন প্রিন্টফ এবং একটি সাধারণ প্রতিধ্বনি নয়?
ychaouche

1
@ ইয়ছাউচে - সম্ভবত echoএকটি নতুন লাইন যুক্ত করা থেকে রোধ করার মতো কোনও পোর্টেবল উপায় নেই বলে?
টবি স্পিড

> fileকমান্ডের সাথে যুক্ত করে আমি এটি একটি ফাইলের দিকে পরিচালিত করার চেষ্টা করেছি , এটি আমার টার্মিনালটিকে স্প্যাম দিয়েছিল"some text at the beginning"
Theonlygusti

2
printf '%s' "some text" | cat - filename > tmpfile && mv tmpfile filename
luca

10

একটি নতুন লাইন সন্নিবেশ করতে:

sed '1i\\'


5

নোট করুন যে ওএস এক্স-এ sed -i <pattern> file, ব্যর্থ হয়েছে। তবে, আপনি যদি কোনও ব্যাকআপ এক্সটেনশান সরবরাহ করেন sed -i old <pattern> fileতবে, তৈরি হওয়ার পরে fileতা স্থান পরিবর্তন করে file.old। তারপরে file.oldআপনি আপনার স্ক্রিপ্টে মুছতে পারেন ।


4
অথবা সেড -i '' ফাইল। তারপরে এটি কেবল স্থানটিতে সম্পাদনা করবে এবং ব্যাকআপ নেবে না।
হার্ভ

আমি খুঁজে পেয়েছি ম্যাকোস সেড ব্যাকআপ না তৈরি করে জায়গায় বিন্দুটি সম্পাদন করতে চায়: সেড -i। <প্যাটার্ন> ফাইল
ব্রায়ান

4

সমস্যা: পিতামাতার ডিরেক্টরিটির মূল নাম সহ ফাইলের শীর্ষে একটি ফাইল ট্যাগ করুন।

অর্থাৎ, জন্য

/mnt/Vancouver/Programming/file1

file1সাথে শীর্ষে ট্যাগ Programming

সমাধান 1 - খালি খালি ফাইলগুলি:

bn=${PWD##*/}    ## bn: basename

sed -i '1s/^/'"$bn"'\n/' <file>

1s ফাইলটির 1 লাইনে পাঠ্য রাখে।

সমাধান 2 - খালি বা খালি খালি ফাইল:

sedকমান্ড উপরে, খালি ফাইল ব্যর্থ। Https://superuser.com/questions/246837/how-do-i-add-text-to-the-beginning-of-a-file-in-bash/246841#246841 এর উপর ভিত্তি করে এখানে একটি সমাধান রয়েছে

printf "${PWD##*/}\n" | cat - <file> > temp && mv -f temp <file>

নোট করুন যে -ক্যাট কমান্ডটি প্রয়োজনীয় (স্ট্যান্ডার্ড ইনপুট: man catআরও তথ্যের জন্য দেখুন)। এখানে, আমি বিশ্বাস করি, প্রিন্টফেট স্টেটমেন্ট (এসটিডিআইএন) এর আউটপুট, এবং বিড়ালটি এবং ফাইলটি টেম্পোর করার দরকার ছিল ... http://www.linfo.org/cat এর নীচেও ব্যাখ্যাটি দেখুন .html

আমি আরও যোগ করেছেন -fকরতে mvকমান্ড ফাইল মুছে যাওয়ার নিশ্চিতকরণ জন্য বলা হচ্ছে এড়ানো।

একটি ডিরেক্টরি পুনরাবৃত্তি করতে:

for file in *; do printf "${PWD##*/}\n" | cat - $file > temp && mv -f temp $file; done

আরও মনে রাখবেন যে এটি ফাঁকা স্থানগুলির সাথে পাথগুলি ভেঙে দেবে; সমাধান আছে, অন্য কোথাও (যেমন ফাইল গ্লোব্বিং, বা- find . -type f ...টাইপ সমাধান)।

যোগ করুন: পুনরায়: আমার শেষ মন্তব্য, এই স্ক্রিপ্টটি আপনাকে পাথের ফাঁকা জায়গাগুলির সাহায্যে ডিরেক্টরিতে পুনরাবৃত্তি করতে অনুমতি দেবে:

#!/bin/bash

## /programming/4638874/how-to-loop-through-a-directory-recursively-to-delete-files-with-certain-extensi

## To allow spaces in filenames,
##   at the top of the script include: IFS=$'\n'; set -f
##   at the end of the script include: unset IFS; set +f

IFS=$'\n'; set -f

# ----------------------------------------------------------------------------
# SET PATHS:

IN="/mnt/Vancouver/Programming/data/claws-test/corpus test/"

# /superuser/716001/how-can-i-get-files-with-numeric-names-using-ls-command

# FILES=$(find $IN -type f -regex ".*/[0-9]*")        ## recursive; numeric filenames only
FILES=$(find $IN -type f -regex ".*/[0-9 ]*")         ## recursive; numeric filenames only (may include spaces)

# echo '$FILES:'                                      ## single-quoted, (literally) prints: $FILES:
# echo "$FILES"                                       ## double-quoted, prints path/, filename (one per line)

# ----------------------------------------------------------------------------
# MAIN LOOP:

for f in $FILES
do

  # Tag top of file with basename of current dir:
  printf "[top] Tag: ${PWD##*/}\n\n" | cat - $f > temp && mv -f temp $f

  # Tag bottom of file with basename of current dir:
  printf "\n[bottom] Tag: ${PWD##*/}\n" >> $f
done

unset IFS; set +f

3

ক্যারেজ রিটার্ন সহ হাই:

sed -i '1s/^/your text\n/' file

3

ফাইলের শীর্ষে একটি লাইন যুক্ত করতে:

sed -i '1iText to add\'

এর মধ্যে একটি নতুন লাইন রয়েছে, যা প্রশ্নকর্তা স্পষ্টভাবে চান না।
টবির গতি

আমার যা প্রয়োজন ঠিক তা দেওয়ার জন্য ধন্যবাদ
FindOutIslamNow

3

খুব সহজ উপায় আছে:

echo "your header" > headerFile.txt
cat yourFile >> headerFile.txt

ওহ ... দুঃখিত, এখন আমি বুঝতে পেরেছি যে আপনি শুরুতে যুক্ত করতে চেয়েছিলেন এবং একটি নতুন লাইন নয়।
রাফেল ভিলাস বোয়াস

তবে আমি একটি নতুন লাইন চেয়েছিলাম। সরল পদ্ধতির জন্য ধন্যবাদ।
TheSatinKnight

3

শুধু মজাদার জন্য, এখানে একটি সমাধান ব্যবহার করে edযা খালি ফাইলটিতে কাজ না করার সমস্যা নেই। আপনি এই প্রশ্নের অন্য কোনও উত্তরের মতো এটি শেল স্ক্রিপ্টে রাখতে পারেন।

ed Test <<EOF
a

.
0i
<added text>
.
1,+1 j
$ g/^$/d
wq
EOF

উপরের স্ক্রিপ্টটি প্রথম লাইনে পাঠ্য যুক্ত করে এবং পরে প্রথম এবং দ্বিতীয় লাইনে যোগ দেয়। কোনও অবৈধ যোগদানের সাথে ত্রুটিযুক্ত অবস্থায় এডিটি প্রস্থান করা এড়াতে, এটি প্রথমে ফাইলের শেষে একটি ফাঁকা লাইন তৈরি করে এবং এটি এখনও উপস্থিত থাকলে এটি পরে সরিয়ে ফেলুন।

সীমাবদ্ধতা:<added text> একক সময়ের সমান সমান হলে এই স্ক্রিপ্টটি কাজ করে না ।


2

আমার দুই সেন্ট:

sed  -i '1i /path/of/file.sh' filename

এটি এমনকি কাজ করবে ফরোয়ার্ড স্ল্যাশযুক্ত স্ট্রিং "/"


1
echo -n "text to insert " ;tac filename.txt| tac > newfilename.txt

প্রথম tacপাইপগুলি ফাইলের পেছনের দিকে (প্রথম লাইনটি প্রথমে) যাতে "সন্নিবেশ করতে পাঠ্য" শেষ প্রদর্শিত হয়। 2 য় tacএটি আবারও আবৃত করে যাতে lineোকানো লাইনটি শুরুতে থাকে এবং মূল ফাইলটি তার মূল ক্রমে থাকে।


1
আপনি দয়া করে ব্যাখ্যা করতে পারেন যে এটি কীভাবে বিষয়টি টমাসকে সহায়তা করবে?
জন ওডম

ট্যাক | ট্যাক - এটি অ-
স্কেলেযোগ্য

0

এলিয়াস সহ আরও একটি সমাধান। আপনার init আরসি / এনভিভি ফাইলটিতে যুক্ত করুন:

addtail () { find . -type f ! -path "./.git/*" -exec sh -c "echo $@ >> {}" \; }
addhead () { find . -type f ! -path "./.git/*" -exec sh -c  "sed -i '1s/^/$@\n/' {}" \; }

ব্যবহার:

addtail "string to add at the beginning of file"
addtail "string to add at the end of file"
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.