සුදු අවකාශය sed හි ගැලපෙන්නේ කෙසේද?


237

සුදු අවකාශය sed හි ගැලපෙන්නේ කෙසේද? මගේ දත්ත වලදී මට අවශ්‍ය වන්නේ 3+ පසුකාලීන සුදු අවකාශයේ අක්ෂර (ටැබ් අවකාශය) හා ඒවා අවකාශ 2 කින් ප්‍රතිස්ථාපනය කිරීමයි. මෙය කළ හැක්කේ කෙසේද?

Answers:


246

අක්ෂර පන්තිය \sහිස් අවකාශයේ අක්ෂර <tab>හා ගැලපේ <space>.

උදාහරණයක් වශයෙන්:

$ sed -e "s/\s\{3,\}/  /g" inputFile

අවම වශයෙන් සුදු අවකාශ 3 ක සෑම අනුක්‍රමයක්ම අවකාශ දෙකක් සමඟ ආදේශ කරයි.


සටහන : POSIX අනුකූලතාවය සඳහා, අක්ෂර පන්තිය [[:space:]]වෙනුවට අක්ෂර පන්තිය භාවිතා කරන්න \s, මන්දයත් GNU sed දිගුවක් වන බැවිනි. Sed සහ BRE සඳහා POSIX පිරිවිතර බලන්න


7
ආහා! මට නැතිවූ ස්විචය එයයි.
අපහාස කිරීම නවත්වන්න මොනිකා සෙලියෝ

26
මට '-r' ස්විචය එක් කිරීමට සිදු වූ අතර එමඟින් දීර් re කරන ලද රීජෙක්ස් අවකාශය ලෙස '\ s' හඳුනා ගැනීමට හැකි වේ.
හබ්

39
ඇපල් සමඟ sedමට වැඩ කිරීමට [[:space:]]සිදු \sනොවූයේ මට වැඩ නොකරන නිසාය . සමහර විට \sයනු GNU sed දීර්ඝ?
ජැරඩ් බෙක්

2
@ ජරෙඩ්බෙක්ට ස්තූතියි, මගේ සරල රීජෙක්ස් ක්‍රියා නොකරන්නේ ඇයිද යන්න පිළිබඳ අදහස් ඉවරයි .. මෙය කොරයි, මම සිතුවේ සම්මත දීර් extended රීජෙක්ස් එකක් ලෙසයි .. එසේම -ආර් වැඩ නොකරන අතර -ඊ ස්කොට් කළා
කාර්තික් ටී

4
වෙනුවට [[:space:]එකක් භාවිතා කළ හැකි [[:blank:]]තිරස් ටැබ් සහ හිස් තැන් පමණක් (නමුත් කිසිදු හිස් පේලි ගැන, සිරස් ටැබ් ආදිය) ගැලපෙන කරන්නේ කුමන.
ස්ථාවර

71

මෙය MacOS 10.8 හි ක්‍රියා කරයි:

sed -E "s/[[:space:]]+/ /g"

2
මෙය සියලුම ලිනක්ස් ඩිස්ට්‍රෝස් වල ක්‍රියාත්මක වේදැයි ඔබ දන්නවාද?
උභයජීවී

2
සාමාන්‍යයෙන් නොවේ, GNU sed -E නොතිබෙනු ඇත. BSD sed man පිටුවෙන්: "-E, -a සහ -i විකල්පයන් සම්මත නොවන FreeBSD දිගු වන අතර ඒවා වෙනත් මෙහෙයුම් පද්ධතිවල නොතිබිය හැකිය."
බ්‍රැඩ් කොච්

1
+ ක්‍රියාකරු සඳහා ඔබට -E ධජය අවශ්‍ය වන්නේ ඇයි? බොහෝ ප්‍රකාශන * වෙනුවට * සමඟ හොඳ වනු ඇත, එවිට මෙය වෙනත් වේදිකාවල ක්‍රියාත්මක වේ.
සැමුවෙල්

5
Am සාමුවෙල් ඔබ * භාවිතා කරන්නේ නම්, රීජෙක්ස් ශුන්‍යයට හෝ වැඩි ගණනකට ගැලපේ, එවිට ඔබට සෑම අක්ෂරයක් අතර ඉඩක් සහ එක් එක් පේළියේ එක් කෙළවරක ඉඩක් ලැබෙනු ඇත. ඔබට -E ධජය නොමැති නම්, ඔබට sed "s/[[:space:]]\+/ /g"අවකාශ එකක් හෝ කිහිපයක් ගැලපීමට අවශ්‍යය .
jbo5112

1
FWIW, NetBSD හි sed ධජයටද සහය දක්වයි -E.
mcandre

14

Sed හි සමහර පැරණි අනුවාදයන් space s සුදු අවකාශයට ගැලපෙන ටෝකනයක් ලෙස හඳුනා නොගනී. එවැනි අවස්ථාවක ඔබට අවකාශයන් හා ටැබ් එකක හෝ වැඩි ගණනක අනුපිළිවෙලක් '[XZ] [XZ] *' සමඟ සැසඳිය හැක, එහිදී X යනු අවකාශයක් වන අතර Z යනු පටිත්තකි.


1
එබැවින් මෙහි විශේෂිත අවශ්‍යතාවයක් සඳහා, පැරණි සෙඩ් එකක් සමඟ ඔබට කළ හැකිය: $ sed '/ [XZ] [XZ] [XZ] [XZ] * / / g' ආදාන ගොනුව X යනු ටැබ් එකක් වන අතර Z යනු අවකාශයකි.
මාර්නික්ස් ඒ. වැන් අම්මර්ස්

11
sed 's/[ \t]*/"space or tab"/'

2
sedඕනෑම පද්ධතියක ඕනෑම අනුවාදයක වැඩ කිරීමට මෙය සහතික වී තිබේද? එසේ නොවේ නම්, මෙය අනෙක් පිළිතුරු වලට සමාන ආකාරයකින් ක්‍රියාත්මක වන්නේ කොතැනද යන්න සඳහන් කිරීම වටී, එබැවින් අපි සීමාවන් දනිමු. මෙහි අපේක්ෂිත ප්‍රති .ලය නොලැබිය හැකිය.
මොකුබායි

2
මෙම RE මා සුදු අවකාශයට ගැලපීමට භාවිතා කරයි. ටැබ් හෝ අවකාශය ගැලපීම සඳහා එය අක්ෂර පන්තිවලට වඩා සරල ය. එය සාමාන්‍ය ප්‍රකාශනවල මූලික සම්මුතීන් පමණක් භාවිතා කරයි, එබැවින් එය නිත්‍ය ප්‍රකාශන ක්‍රියාකාරී ලෙස ක්‍රියාත්මක කිරීම සමඟ ඕනෑම තැනක ක්‍රියා කළ යුතුය.
Nate

3
මැක් 10.9.5 හි මෙය අවකාශයන් හා 'ටී' සඳහා ගැලපේ. සුදු පැහැති අක්ෂර ගැලපීමට මම මයිකල් ඩූමාගේ ඉහත භාවිතා කළෙමි (එය -e සමඟ ද ක්‍රියා කරයි).
පිටසක්වල ජීව ආකෘති පත්‍රය

මගේ SUSE පද්ධතියේ සංවේදීව ක්‍රියා නොකරයි. එය ශුන්‍ය හෝ වැඩි ඉඩ ප්‍රමාණයක් ඇති රේඛාවේ පළමු ස්ථානයට ගැලපේ, එය පළමු අක්ෂරයට පෙර වේ. එය අපේක්ෂිත ශ්‍රිතය බව මට සැකයි, නිසැකවම ඉල්ලූ භාවිත අවස්ථාව නොවේ. '\ +' සඳහා '*' (හෝ '\ {3, \}' ප්‍රශ්නයට අනුව) වෙනස් කිරීමට ඔබට අවශ්‍ය යැයි මම විශ්වාස කරමි. සමහර විට රටාවේ සියලු සිදුවීම් සමඟ සැසඳීම සඳහා sed විධානය අවසානයේ වයස්ගත කරන්න. [\ T] [[: space:]] සමඟ ප්‍රතිස්ථාපනය කිරීමද සුදුසු විය හැකිය, රේඛාවේ සුදු අවකාශය සඳහා වෙනත් යමක් තිබේ නම්.
jbo5112
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.