Я спробував наступний код , щоб замінити QQз ZZ, але він не робить те , що я хочу:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Однак цей код робить те, що я хочу:
sed -i 's/QQ/ZZ/g' $file
Як я можу використовувати змінні sed?
Я спробував наступний код , щоб замінити QQз ZZ, але він не робить те , що я хочу:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Однак цей код робить те, що я хочу:
sed -i 's/QQ/ZZ/g' $file
Як я можу використовувати змінні sed?
Відповіді:
Оболонка відповідає за розширення змінних. Якщо ви використовуєте одиничні лапки для рядків, її вміст буде оброблятися буквально, тому 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/
gваріант, тому ви переходите s,foo,bar,gзамість цього.
\\0замість цього \0, це робити не повинно, коли \0він укладений в єдині лапки. Інакше sedзамінить шаблон на буквальний, \0а не на весь матч.
Ми можемо використовувати змінні при sedвикористанні подвійних лапок:
sed -i "s/$var/r_str/g" file_name
Якщо ви маєте косу рису /змінної, використовуйте інший роздільник, як показано нижче:
sed -i "s|$var|r_str|g" file_name
/в змінній => Це врятувало мене! Моя змінна URL-адреса, і вона містить /. Перехід на використання |як сепаратор