Sed විධානයක විචල්‍යයන් භාවිතා කරන්නේ කෙසේද?


324

මම වෙනුවට පහත දැක්වෙන කේතය උත්සාහ QQසමග ZZ, නමුත් එය මට ඕන දේ කරන්න නොවේ:

var1=QQ
sed -i 's/$var1/ZZ/g' $file

කෙසේ වෙතත්, මෙම කේතය මට අවශ්‍ය දේ කරයි:

sed -i 's/QQ/ZZ/g' $file

මම විචල්යයන් භාවිතා කරන්නේ කෙසේද sed?



Answers:


425

විචල්යයන් පුළුල් කිරීම සඳහා කවචය වගකිව යුතුය. ඔබ නූල් සඳහා තනි මිල කැඳවීම් භාවිතා කරන විට, එහි අන්තර්ගතය නිසා, වචනාර්ථයෙන් ප්රතිකාර කරනු ඇත sedදැන් ප්රායෝගික සෑම සිදුවීමක් වෙනුවට උත්සාහ $var1විසින් ZZ.

ද්විත්ව මිල ගණන් භාවිතා කිරීම

හිස් අවකාශය ආරක්ෂා කර ගනිමින් ෂෙල් පුළුල් විචල්‍යයන් බවට පත් කිරීම සඳහා ද්විත්ව උපුටා දැක්වීම් භාවිතා කරන්න:

sed -i "s/$var1/ZZ/g" "$file"

ප්‍රතිස්ථාපන නූලෙහි ඔබට උපුටා දැක්වීමේ අක්‍ෂරය අවශ්‍ය වූ විට, ඔබට එය පෙර-බෑවුමකින් පෙර කළ යුතු අතර එය කවචය මගින් අර්ථ නිරූපණය කෙරේ. පහත දැක්වෙන උදාහරණයේ දී, නූල quote meප්‍රතිස්ථාපනය වේ "quote me"(අක්‍ෂරය &අර්ථ නිරූපණය කරන්නේ sed):

sed -i "s/quote me/\"&\"/" "$file"

තනි උපුටා දැක්වීම් භාවිතා කිරීම

ඔබ සතුව ෂෙල් මෙටා-අක්ෂර ගොඩක් තිබේ නම්, රටාව සඳහා තනි උපුටා දැක්වීම් සහ විචල්‍යය සඳහා ද්විත්ව උපුටා දැක්වීම් සලකා බලන්න:

sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"

s,pattern,replacement,ඒ වෙනුවට මා භාවිතා කරන ආකාරය සැලකිල්ලට ගන්න s/pattern/replacement/, මම එය කළේ /ඇතුළට බාධා නොකිරීමටයි \0/.

උදාහරණයක්

කවචය sedඊළඟ විධානය සමඟ ඉහත විධානය ක්‍රියාත්මක කරයි (උපකල්පනය pattern=bertසහ file=text.txt):

-i
s,bert,Say hurrah to &: \0/,
text.txt

file.txtඅඩංගු නම් bert, ප්‍රතිදානය වනුයේ:

Say hurrah to bert: \0/

2
මෙම කොමා වලින් වෙන් කරන ලද පෝරමය භාවිතා කරමින් යමෙක් "/ g" විකල්පය සමත් වන්නේ කෙසේද?
— blong

6
@ b.long එය gවිකල්පයක් බැවින් ඔබ ඒ s,foo,bar,gවෙනුවට සමත් වනු ඇත .
— ලෙකන්ස්ටයින්

1
ඔබේ තනි උපුටා දැක්වීමේ උදාහරණය අර්ධ වශයෙන් ප්‍රයෝජනවත් වේ, රීජෙක්ස් රටාව භාවිතයෙන් ආවරණය කරයි.
— බ්‍රයන් තෝමස්

ඔබ \\0ඒ වෙනුවට භාවිතා කිරීමට පෙළඹී \0ඇත්නම්, එය \0තනි උපුටා දැක්වීම්වල ඇතුළත් කර ඇති විට එය නොකළ යුතුය . එසේ නොමැතිනම් සමස්ත තරගය වෙනුවට sedවචනාර්ථයෙන් රටාව ආදේශ කරනු ඇත \0.
— ලෙකන්ස්ටයින්

2
නැතහොත්, uber-paranoid සඳහා (මා වැනි),sed 's/'"${foo}"'/replacement/'
— leetbacoon

137

sedද්විත්ව මිල ගණන් භාවිතා කිරීමේදී අපට විචල්යයන් භාවිතා කළ හැකිය :

sed -i "s/$var/r_str/g" file_name

ඔබට /විචල්යයේ කප්පාදුවක් තිබේ නම් පහත දැක්වෙන පරිදි විවිධ බෙදුම්කරු භාවිතා කරන්න:

sed -i "s|$var|r_str|g" file_name

12
ඔබට /විචල්යයේ කප්පාදුවක් තිබේ නම් => මෙය මාව බේරා ගත්තේය! මගේ විචල්‍යය යූආර්එල් එකක් වන අතර එහි අඩංගු වේ /. |බෙදුම්කරු ලෙස භාවිතා කිරීමට මාරුවීම මගේ ගැටළුව විසඳා ඇත
— sonlexqt

3
"ඔබට විචල්යයේ කප්පාදුවක් තිබේ නම්"
— Tiina

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.