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.