වේගවත් පිළිතුර
sed ':a;N;$!ba;s/\n/ /g' file
- : a 'a' ලේබලයක් සාදන්න
- N ඊළඟ පේළිය රටා අවකාශයට එකතු කරන්න
- $! අන්තිම පේළිය නොවේ නම් , ba ශාඛාව (යන්න) 'a' ලේබලය
- s ආදේශකය , / line n / නව රේඛාව සඳහා රීජෙක්ස් , / / අවකාශයකින් , / g ගෝලීය ගැලපීම (හැකි තරම් වාරයක්)
අවසාන පේළියට ළඟා වන තෙක් sed 1 සිට 3 දක්වා පියවර හරහා ලූපය, සියලු රේඛා රටා අවකාශයට ගැළපෙන පරිදි sed සියළුම අක්ෂර ආදේශ කරයි
විකල්ප
සියලුම විකල්පයන්, sed මෙන් නොව ක්රියාවලිය ආරම්භ කිරීම සඳහා අවසාන පේළියට ළඟා වීමට අවශ්ය නොවනු ඇත
බෑෂ් සමඟ , මන්දගාමී
while read line; do printf "%s" "$line "; done < file
සමග perl බසට ලං , sed -like වේගය
perl -p -e 's/\n/ /' file
tr සමඟ , sed ට වඩා වේගවත් , එක් අක්ෂරයකින් පමණක් ප්රතිස්ථාපනය කළ හැකිය
tr '\n' ' ' < file
පේස්ට් සමඟ , tr- සමාන වේගයකින්, එක් අක්ෂරයකින් පමණක් ආදේශ කළ හැකිය
paste -s -d ' ' file
සමග awk , tr වේගය -like
awk 1 ORS=' ' file
"Echo <(<file)" වැනි වෙනත් විකල්පයක් මන්දගාමී වන අතර එය කුඩා ලිපිගොනු මත පමණක් ක්රියාත්මක වන අතර ක්රියාවලිය ආරම්භ කිරීම සඳහා සම්පූර්ණ ගොනුව සැකසීමට අවශ්ය වේ.
5.10. Escape n ගැලවීමේ
අනුක්රමය භාවිතා කර මට නව රේඛාවක් ගැලපීමට හෝ මකා දැමීමට නොහැකි ඇයි ? මට lines n භාවිතා කරමින් පේළි 2 ක් හෝ වැඩි ගණනක් ගැලපෙන්නේ නැත්තේ ඇයි?
Line n කිසි විටෙකත් රේඛාව අවසානයේ නව රේඛාවට නොගැලපේ, මන්ද රේඛාව
රටා අවකාශයට
තැබීමට පෙර සෑම විටම නව රේඛාව ඉවත් කරනු ලැබේ
. රටා අවකාශයට පේළි 2 ක් හෝ වැඩි ගණනක් ලබා ගැනීමට,
'N' විධානය හෝ ඊට සමාන දෙයක් භාවිතා කරන්න ('H; ...; g;' වැනි).
සෙඩ් මේ ආකාරයට ක්රියා කරයි: sed වරකට එක් පේළියක් කියවයි,
අවසන් වන නව රේඛාව කපා දමයි
, සෙඩ් ස්ක්රිප්ටයට ආමන්ත්රණය කිරීමට හෝ වෙනස් කිරීමට හැකි රටා අවකාශයට ඉතිරිව ඇති දේ සහ රටා අවකාශය
මුද්රණය කළ විට, නව රේඛාවක් stdout සඳහා එකතු කරයි (හෝ ගොනුවකට).
රටා අවකාශය 'd' හෝ 'D' සමඟ මුළුමනින්ම හෝ අර්ධ වශයෙන් මකා දැමුවහොත්, එවැනි අවස්ථා වලදී
නව රේඛාව එකතු නොවේ . මේ අනුව, ස්ක්රිප්ට් කැමතියි
sed 's/\n//' file # to delete newlines from each line
sed 's/\n/foo\n/' file # to add a word to the end of each line
රටා අවකාශයට රේඛාව දැමීමට පෙර
නව රේඛාව ඉවත් කරන බැවින් කිසි විටෙකත් ක්රියා නොකරනු ඇත . ඉහත කාර්යයන් ඉටු කිරීම සඳහා,
ඒ වෙනුවට මෙම ස්ක්රිප්ට් වලින් එකක් භාවිතා කරන්න:
tr -d '\n' < file # use tr to delete newlines
sed ':a;N;$!ba;s/\n//g' file # GNU sed to delete newlines
sed 's/$/ foo/' file # add "foo" to end of each line
GNU sed හැරුණු විට sed වල අනුවාද
රටා බෆරයේ ප්රමාණයට සීමාවන් ඇති බැවින් යුනික්ස් 'tr' උපයෝගීතාව මෙහිදී වඩාත් සුදුසු වේ.
ගොනුවේ අවසාන පේළියේ නව රේඛාවක් තිබේ නම්, GNU sed විසින්
එම නව රේඛාව ප්රතිදානයට එකතු කරනු ඇති නමුත් අනෙක්
සියල්ල මකා දමනු ඇත, නමුත් tr සියලු නව රේඛා මකා දමනු ඇත .
පේළි දෙකක හෝ වැඩි ගණනක කොටසකට ගැලපීම සඳහා මූලික තේරීම් 3 ක් ඇත:
(1) රටා අවකාශයට ඊළඟ පේළිය එක් කිරීමට 'එන්' විධානය භාවිතා කරන්න;
(2) වත්මන් රේඛාව
හෝල්ඩ් අවකාශයට එකතු කිරීම සඳහා අවම වශයෙන් දෙවරක්වත් 'එච්' විධානය භාවිතා කරන්න , ඉන්පසු රැඳවුම් අවකාශයේ සිට රේඛා
x, g, හෝ G සමඟ ලබා ගන්න; හෝ (3)
නිශ්චිත ලිපින දෙකක් අතර රේඛා ගැලපීම සඳහා ලිපින පරාස භාවිතා කරන්න (ඉහත 3.3, ඉහත කොටස බලන්න) .
තේරීම් (1) සහ (2) රටා අවකාශයට \ n දමනු ඇත, එහිදී එය
අපේක්ෂිත පරිදි ආමන්ත්රණය කළ හැකිය ('s / ABC X nXYZ / හෝඩිය / g').
රේඛා වාරණයක් මකා දැමීමට 'එන්' භාවිතා කිරීමේ එක් උදාහරණයක් 4.13 වගන්තියේ දැක්වේ
(" නිශ්චිත අඛණ්ඩ පේළි සමූහයක් මකා දැමිය හැක්කේ කෙසේද ?").
මකාදැමීමේ විධානය
'p' (මුද්රණය), 'i' (ඇතුළු කරන්න), 'c' (වෙනස් කිරීම), 'a' (එකතු කරන්න)
හෝ 's' (ආදේශක) වැනි වෙනත් දෙයකට වෙනස් කිරීමෙන් මෙම උදාහරණය වෙනස් කළ හැකිය. .
තෝරාගැනීම (3) \ n රටාව අවකාශය තුලට දමා නැත, නමුත් එය කරන්නේ කෙසේද
, අඛණ්ඩව රේඛා වාරණ ගැලපෙන නිසා එය ඔබ නැති බව විය හැක
පවා ඔබ සොයන දේ සොයා ගැනීමට අවශ්ය \ n. GNU sed
අනුවාදය 3.02.80 දැන් මෙම වාක්ය ඛණ්ඩයට සහය දක්වයි:
sed '/start/,+4d' # to delete "start" plus the next 4 lines,
සාම්ප්රදායික '/ මෙතැන් සිට /, / එතැනට / {... range' පරාසයේ
ලිපින වලට අමතරව, \ n භාවිතය සම්පූර්ණයෙන්ම වළක්වා ගත හැකිය.
tr
තනි අක්ෂරයක් සඳහා තනි අක්ෂරයක් ආදේශ කරන්නේ නම් කාර්යය සඳහා නිවැරදි මෙවලම පමණක් වන අතර ඉහත උදාහරණයෙන් දැක්වෙන්නේ නව රේඛාව අවකාශයක් වෙනුවට ආදේශ කිරීමයි .. එබැවින් ඉහත උදාහරණයේ දී tr වැඩ කළ හැකිය .. නමුත් පසුව සීමා වනු ඇත.