Я попробовал следующий код, чтобы заменить 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/
Оболочка отвечает за расширение переменных. Когда вы используете одинарные кавычки для строк, его содержимое будет обрабатываться буквально, поэтому 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/
Мы можем использовать переменные в sed, используя двойные кавычки:
sed -i "s/$var/r_str/g" file_name
Если у вас есть косая черта / в переменной, используйте другой разделитель, как показано ниже:
sed -i "s|$var|r_str|g" file_name
Мы можем использовать переменные в sed, используя двойные кавычки:
sed -i "s/$var/r_str/g" file_name
Если у вас есть косая черта / в переменной, используйте другой разделитель, как показано ниже:
sed -i "s|$var|r_str|g" file_name