Я спробував наступний код , щоб замінити 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-адреса, і вона містить /
. Перехід на використання |
як сепаратор