හායි මට ගොනුවකට පෙළ සකස් කිරීමට අවශ්යයි. උදාහරණයක් ලෙස මට todo.txt ගොනුවක ආරම්භයට කාර්යයන් එක් කිරීමට අවශ්යයි. මම දන්නා echo 'task goes here' >> todo.txt
නමුත් එය ගොනුවේ අවසානයට රේඛාව එක් කරයි (මට අවශ්ය දේ නොවේ).
හායි මට ගොනුවකට පෙළ සකස් කිරීමට අවශ්යයි. උදාහරණයක් ලෙස මට todo.txt ගොනුවක ආරම්භයට කාර්යයන් එක් කිරීමට අවශ්යයි. මම දන්නා echo 'task goes here' >> todo.txt
නමුත් එය ගොනුවේ අවසානයට රේඛාව එක් කරයි (මට අවශ්ය දේ නොවේ).
Answers:
echo 'task goes here' | cat - todo.txt > temp && mv temp todo.txt
හෝ
sed -i '1s/^/task goes here\n/' todo.txt
හෝ
sed -i '1itask goes here' todo.txt
|
) පණිවිඩය ( echo '...'
) cat
භාවිතා කරන -
(සම්මත ආදානය) පළමු ගොනුව todo.txt
ලෙසත් දෙවන ගොනුව ලෙසත්. cat
බහුවිධ ගොනු සම්බන්ධ කරයි. ප්රතිදානය ( >
) නම් කරන ලද ගොනුවකට යවන්න temp
. ( &&
) සිට දෝෂ නොමැති cat
නම් ( mv
) temp
ගොනුව මුල් ගොනුවට ( todo.txt
) නැවත නම් කරන්න .
cat
වචනයේ පරිසමාප්ත අර්ථයෙන්ම n ලැබුනහොත් එය නව රේඛාවක් බවට පරිවර්තනය නොවේ. වෙන දෙයක් ඒක කරන්න ඇති. ඒ වෙනුවට cat
, hexdump -C
ඔබ සැබවින්ම බැක්ස්ලෑෂ් සහ එන් යවන්නේද නැතහොත් එය නව රේඛාවක්ද යන්න බැලීමට උත්සාහ කරන්න . ඔබට cat -e
පේළි කෙළවර පෙන්වීමට උත්සාහ කළ හැකිය .
1
මාධ්යයන් ඊළඟ විධානය කරන්නේ ගොනුවේ පළමු පේළියේ පමණක් වන අතර i
විධානය ඇතුල් කරනු ලැබේ. "ලිපින" කොටස යටතේ ඇති "පිටුවෙහි" සහ "ශුන්ය හෝ එක් ලිපින විධාන" කොටසේ බලන්න.
මගේ මතය අනුව සරල විකල්පයක් නම්:
echo -e "task goes here\n$(cat todo.txt)" > todo.txt
මෙම කෘති විධානය තුල නිසා $(...)
පෙර ක්රියාත්මක වන todo.txt
ලියැවෙනු ඇත> todo.txt
අනෙක් පිළිතුරු හොඳින් ක්රියාත්මක වන අතර, මම මෙය දිනපතා දෝංකාරය සහ බළලා භාවිතා කරන නිසා මෙය මතක තබා ගැනීම පහසුය.
සංස්කරණය කරන්න: පසුපෙළවල් තිබේ නම් මෙම විසඳුම ඉතා නරක අදහසකි todo.txt
, මන්ද -e
ධජයේ දෝංකාරයට ස්තූතිවන්ත වීමෙන් ඒවා අර්ථ නිරූපණය වනු ඇත. නව රේඛා පෙරවදනට ඇතුළත් කිරීමට තවත් පහසු ක්රමයක් වන්නේ ...
echo "task goes here
$(cat todo.txt)" > todo.txt
... හුදෙක් නව රේඛා භාවිතා කිරීමට. ෂුවර්, එය තවදුරටත් එක් ලයිනර් නොවේ, නමුත් යථාර්ථවාදීව එය මීට පෙර එක් ලයිනර් එකක් නොවීය. ඔබ මෙය ස්ක්රිප්ට් එකක් තුළ කරන්නේ නම්, සහ ඉන්ඩෙන්ටින් කිරීම ගැන කනස්සල්ලට පත්ව සිටී නම් (උදා: ඔබ මෙය ශ්රිතයක් තුළ ක්රියාත්මක කරයි) මෙය ඇතුළුව නමුත් ඒවාට පමණක් සීමා නොවී මෙය තවමත් මනාව ගැලපෙන පරිදි සකස් කළ හැකි ක්රියාමාර්ග කිහිපයක් තිබේ:
echo 'task goes here'$'\n'"$(cat todo.txt)" > todo.txt
එසේම, නව රේඛාවක් අවසානයට එකතු වේ දැයි ඔබ සැලකිලිමත් වන්නේ නම් todo.txt
, මේවා භාවිතා නොකරන්න. හොඳයි, දෙවන සිට අන්තිම එක හැර. එය අවසානය සමඟ පටලවා නොගනී.
-e
ද todo.txt තුල පැන අනුක්රමය පරිවර්තනය?
බොහෝ බෙදාහැරීම් වලදී ඔබට භාවිතා කළ හැකිය tee
:
echo "task goes here" | cat - todo.txt | tee todo.txt
විකල්පයක් නම් moreutils
හොඳ මෙවලමක් ඇති sponge
:
echo "task goes here" | cat - todo.txt | sponge todo.txt
tee
හා sponge
ඔබ තාවකාලික ගොනු ගැන කරදර වෙන්න ඕනේ සහ ඒ අවට ඔවුන් ගමන් කරන්නේ නැහැ, ඉන් අදහස් වන්නේ, ගොනුව කිරීමට STDIN පසුව ලිවිම "දක්වා පොඟවා ගැනීම සිදු කරයි" ඇත.
ඔබ විසින් ලබා ගත හැකි moreutils
හරහා බොහෝ ලිනක්ස් distros සමග apt-get install moreutils
භාවිතා, හෝ OS X මෙහෙයුම් පද්ධතිය මත බරපැනක් සමග, brew install moreutils
.
(echo 'ble'; cat todo.txt)
:-)
tee
echo "task goes here" | cat - todo.txt | tee todo.txt
sponge
වෙනස් ආකාරයකින් කරන්නේ කුමක්දැයි මට විශ්වාස නැත , සමහර විට එය ආදානය සම්පූර්ණයෙන්ම වළක්වයි?
ඔබට Vim in Ex මාදිලිය භාවිතා කළ හැකිය:
ex -s -c '1i|task goes here' -c x todo.txt
1
පළමු පේළිය තෝරන්න
i
ඇතුළු කරන්න
x
සුරකින්න සහ වසා දමන්න
ඔබට නව තාවකාලික ගොනුවක් සෑදිය හැකිය.
echo "new task" > new_todo.txt
cat todo.txt >> new_todo.txt
rm todo.txt
mv new_todo.txt todo.txt
ඔබ ද භාවිතා කළ හැක sed
හෝ awk
. නමුත් මූලික වශයෙන් එකම දේ සිදු වේ.
new_todo.txt
එය අර්ධ වශයෙන් පමණක් ලියා ඇත. ඔබේ විසඳුම මුල් ගොනුව නැති වූ බවක් පෙනේ.
rm
මුල් ගොනුවේ වේ.
පෙළ ගොනුව මතකයට සරිලන තරම් කුඩා නම්, එය ප්රතිස්ථාපනය කිරීම සඳහා තාවකාලික ගොනුවක් සෑදිය යුතු නැත. ඔබට ඒ සියල්ල මතකයට පටවා නැවත ගොනුවට ලිවිය හැකිය.
echo "$(echo 'task goes here' | cat - todo.txt)" > todo.txt
සම්පූර්ණ ගොනුව ලිවීමෙන් තොරව ගොනුවේ ආරම්භයට රේඛා එක් කළ නොහැක.
text=$(cat file)
. ෂෙල් විචල්යයන් ද්විමය පිරිසිදු නොවන නිසා පෙළ පමණක් භාවිතා කිරීමට ප්රවේශම් වන්න mywiki.wooledge.org/BashFAQ/058
ගොනුවක ආරම්භයේ දී ඔබට අන්තර්ගතය ඇතුළත් කළ නොහැක. ඔබට කළ හැකි එකම දෙය වන්නේ පවතින අන්තර්ගතය ප්රතිස්ථාපනය කිරීම හෝ ගොනුවේ වත්මන් අවසානයෙන් පසුව බයිට් එකතු කිරීමයි.
ඔබගේ ප්රශ්නයට ඕනෑම විසඳුමක් සඳහා තාවකාලික ගොනුවක් (හෝ බෆරයක්) නිර්මාණය කිරීම අවශ්ය වේ (මතකයේ හෝ තැටියේ) එය අවසානයේදී මුල් ගොනුව නැවත ලියයි.
නව ගොනුව නිර්මාණය කිරීමේදී මුල් ගොනුව සුරැකීමෙන් දත්ත නැති නොවීමට වගබලා ගන්න, ක්රියාවලිය අතරතුර ගොනු පද්ධතිය පිරී තිබේ නම්. උදා:
cat <(echo task go there) todo.txt > todo.txt.new && mv todo.txt.new todo.txt
echo HOME=\"/g/Users/timregan/\" | cat - 'F:\Program Files\Git\etc\profile'
ක්රියා කරන නමුත් cat <echo HOME=\"/g/Users/timregan/\" 'F:\Program Files\Git\etc\profile'
දෝෂය ලබා දෙයි "echo: එවැනි ගොනුවක් හෝ නාමාවලියක් නැත"
<
සහ අතර අවකාශයක් (
වාක්ය ඛණ්ඩය බිඳ දමනු ඇත. උත්සාහ කරන්නcat <(echo HOME=\"/g/Users/timregan/\") 'F:\Program Files\Git\etc\profile'
GitBash + Windows10 + Multline :
මෙන්න ඔබට බහු රේඛා නූල් භාවිතා කිරීමට ඉඩ දෙන අනුවාදයකි .
##############################################
## This section for demo purpose only, ##
## So you can save entire file as ##
## whatever.sh and run it. ##
## ##
##############################################
> MY_TARGET_FILE.txt ##Make Or Clear File
echo "[STARTER_CONTENT]" >> MY_TARGET_FILE.txt
##############################################
## Below is main code:
##################################################
TARGET_FILE_VARIABLE="MY_TARGET_FILE.txt"
ADD_TO_HEAD_VARIABLE=$(cat << "HEREDOC_HEAD_TEXT"
//| +-------------------------------------+ |//
//| | | |//
//| | MESSAGE_FOR_HEAD_OF_FILE | |//
//| | | |//
//| +-------------------------------------+ |//
HEREDOC_HEAD_TEXT
)
##################################################
TAR=$TARGET_FILE_VARIABLE ##
TEX=$ADD_TO_HEAD_VARIABLE ##
echo "$TEX" | cat - $TAR > TEMP && mv TEMP $TAR ##
##################################################
## Expected contents of MY_TARGET_FILE.txt :
## //| +-------------------------------------+ |//
## //| | | |//
## //| | MESSAGE_FOR_HEAD_OF_FILE | |//
## //| | | |//
## //| +-------------------------------------+ |//
## [STARTER_CONTENT]
අවසාන පිළිතුර
cat <<< "prepended text
$(cat test.txt)" > test.txt
සන්දර්භය
යතුරු ලියනය කිරීමක් ලෙස ඔවුන්ට හැඟුණු නිසා මම පිළිතුරු ගැන සෑහීමකට පත් නොවෙමි. මම ජෝන් ඇල්බට්ස්ගේ පිළිතුරට කැමතියි නමුත් ටයිප් කිරීමට නොහැකි විය -e
. අවාසනාවකට මෙන්, මම අහම්බෙන් ජෝන් ඇල්බට්ස්ගේ echo
ලයිනර් 2 කියවා බැලුවෙමි (මෙම පිළිතුරේ වටිනාකම සැලකිය යුතු ලෙස අඩු කර මා විනාඩි 30 ක් පමණ සෙල්ලම් කළෙමි, නමුත් හොඳයි, එය සිදු වේ).
කෙසේ වෙතත්, මම අවධානය යොමු කළේ ඔබට අවශ්ය ලිපිගොනු සහ පෙළ ටයිප් කිරීමට පමණක් අවශ්ය වන යමක් සොයා ගැනීමට ය.
එපමණක්ද නොව, මම සෞන්දර්යාත්මකව පෙනෙන යමක් සොයමින් සිටියෙමි. ඒ සමඟ මා අදහස් කළේ: පූර්ව සූදානම භෞතිකව පෙන්විය යුතුය, එය මායාවක් වුවද එය සිහිවටනයක බලපෑමක් ඇති කරයි.
ඒ නිසා මම නිවැරදි සන්දර්භය තුළ සංජානන වික්රියාව අඩු කරන බැවින් (එනම් <
3 වතාවක් ටයිප් කිරීම ඕනෑවට වඩා සිතීමේ ශක්තියක් අවශ්ය නොවේ).
මම test.txt
වචනය සමඟ ගොනුවක් නිර්මාණය කළෙමි "monkeys"
.
මම ටයිප් කළෙමි:
cat <<< "prepend
> $(< test.txt)"
ප්රතිදානය:
prepend
monkeys
ටිකක් පැහැදිලි කිරීම:
ඔබ අතින් ඔබන්න enter
.
දෙවන පේළියේ >
එය කවචයේ සිටම වේ, ඔබට එය ටයිප් කිරීමට අවශ්ය නැත.
සටහන්:
(1) මට කළමනාකරණය කළ නොහැකි වූයේ එක් ලයිනර් ය. මට භාවිතා කළ හැකි $()
සහ වෙනස් කිරීමේ සංයෝජනයක් නොමැති බව පෙනේ \n
. අළුත් රේඛාව ඔබ විසින්ම ඔබන්න.
(2) $(< test.txt)
ට සමාන බලපෑමක් ඇත $(cat test.txt)
. මෙම බෑෂ් විමර්ශන අත්පොත රාජ්යයන්:
විධාන ආදේශනය
$(cat file)
සමාන නමුත් වේගවත් ආදේශ කළ හැකිය$(< file)
.
එබැවින් ඔබට ද කළ හැකිය:
cat <<< "prepend
> $(cat test.txt)"
වැඩිපුර ටයිප් කිරීම, නමුත් cat
දෙවරක් යතුරු ලියනය කර ඇති බැවින් එය ටිකක් අඩු සංජානන වික්රියා බව මම පිළිගනිමි .