මූලික නිත්ය ප්රකාශනයට (BRE) පමණක් සහය දක්වන POSIX ප්රමිතිය මත sed පදනම් වී ඇති බව සඳහන් කිරීම වටී යැයි මම සිතමි. Sed විධානයෙහි වෙනස් සංස්කරණ දෙකක් ඇත්ත වශයෙන්ම පවතී - BSD (Mac OS) සහ GNU (Linux distros) . සෑම අනුවාදයක්ම POSIX ප්රමිතියට සමාන හා අද්විතීය දිගු ක්රියාත්මක කරන අතර විවිධ වේදිකා හරහා sed හි ක්රියාකාරීත්වයට බලපෑම් කළ හැකිය. එහි ප්රති As ලයක් වශයෙන්, එක් පද්ධතියක අපේක්ෂිත පරිදි ක්රියාත්මක වන sed විධානයෙහි නිසි වාක්ය ඛණ්ඩය ඇත්ත වශයෙන්ම තවත් වෙනස් ප්රති results ලයකට පරිවර්තනය කළ හැකිය. පැන ගිය සහ විශේෂ අක්ෂර භාවිතය සම්බන්ධයෙන් අනපේක්ෂිත ලෙස හැසිරීමට මෙය හේතු විය හැක.
පොසික්ස් ප්රමිතියට මෙම දිගුවන් සෙඩ් හි ග්නූ අනුවාදය මත වඩාත් ප්රචලිත වන අතර බොහෝ විට අඩු තද ආකෘතිකරණයේ පහසුව සපයයි, විශේෂයෙන් බීඑස්ඩී අනුවාදයට සාපේක්ෂව. කෙසේ වෙතත්, GNU sed සමහර විශේෂ අක්ෂරවල ක්රියාකාරීත්වයට ඉඩ දී ඇති නමුත් ඒවා තවමත් ඇත්ත වශයෙන්ම POSIX- අනුකූල නොවේ. මීට අමතරව, GNU sed තුළ මූලික හා දීර් extended නිත්ය ප්රකාශනය (ERE) අතර ඇති එකම සැබෑ වෙනස වන්නේ පහත දැක්වෙන විශේෂ අක්ෂරවල හැසිරීමයි:
'?', '+', වරහන්, වරහන් ('{}'), සහ '|'
මෙය එසේ විය හැකි නමුත්, සමහර විශේෂ අක්ෂරවලට බීඑස්ඩී සෙඩ් සඳහා '|', '?', සහ '+' වැනි සීමිත හෝ සහායක් නොමැත, එය පොසික්ස් සින්ටැක්ස් ප්රමිතීන්ට වඩා සමීපව පිළිපදින බැවින්. එම චරිත ඇතුළත් කිරීම, ග්නූ සෙඩ්ගේ ස්වරූපයට සමාන ආකාරයකින්, බොහෝ විට සෙඩ් භාවිතා කරමින් ස්ක්රිප්ට් වල අතේ ගෙන යා හැකි සහ ක්රියාකාරීත්වයේ ගැටළු ඇති කරයි. POSIX BRE සින්ටැක්ස් සමහර ගැලවීමේ අනුක්රමයන් සඳහා අර්ථයක් නිර්වචනය නොකරයි, විශේෂයෙන්: \ |, +, \?, `, \ ', \ <,>, \ B, \ B, \ w, සහ \ ඩබ්ලිව්.
බීඑස්ඩී / මැක් ඕඑස් අනුවාදය ධාවනය කරන අයට, සමහර විශේෂ අක්ෂරවල හැසිරීම අනුකරණය කිරීම ටිකක් උපක්රමශීලී විය හැකි නමුත් බොහෝ අවස්ථාවන්හිදී එය කළ හැකිය. උදාහරණයක් ලෙස, + මේ හා සමාන පොසික්ස් අනුකූල ආකාරයකින් අනුකරණය කළ හැකිය: {1,} සහ \? like 0,1} පාලක අක්ෂර අනුපිළිවෙලට සාමාන්යයෙන් සහය නොදක්වයි. හැකි නම්, නිසැකවම GNU sed භාවිතා කිරීම පහසුය, නමුත් ඔබට වේදිකා දෙකෙහිම ක්රියාකාරීත්වය අවශ්ය නම්, අතේ ගෙන යා හැකි බව සහතික කිරීම සඳහා POSIX විශේෂාංග පමණක් භාවිතා කිරීමට මතක තබා ගන්න. ඔබ මැක් පරිශීලකයෙකු නම් සහ BSD sed වලට වඩා GNU sed වලින් ප්රයෝජන ගැනීමට කැමති නම්, ඔබට හෝම්බ rew ස්ථාපනය කිරීමට උත්සාහ කළ හැකිය, සහ GNU sed විධාන රේඛාව හරහා බාගත කරන්න: w brew install gnu-sed.
දේවල් සංවර්ධනය කිරීම සඳහා, අනුවාදයේ වෙනස්කම් මගින් නියම වාක්ය ඛණ්ඩය කෙබඳු විය හැකිද යන්න හෝ පැන යාමට අවශ්ය චරිත මොනවාද යන්න නියම කළ හැකිය. මෙය ආරම්භක ප්රශ්නයට මෙන්ම පිළිගත් පිළිතුරට අමතර සන්දර්භයක් සපයනු ඇතැයි මම බලාපොරොත්තු වෙමි, අනෙක් අයට ඔවුන්ගේ ස්ක්රිප්ට් සහ විධාන භාවිතයේ අවසාන ඉලක්කය මත පදනම්ව ඉදිරියට යා යුතු ආකාරය සලකා බැලීමට උපකාරී වේ.
function sedPath { path=$((echo $1|sed -r 's/([\$\.\*\/\[\\^])/\\\1/g'|sed 's/[]]/\[]]/g')>&1) } #Escape path for use with sed