заменить текст переменной - PullRequest
0 голосов
/ 08 июля 2011

Я хочу заменить значение переменной. Следующее не работает из-за одиночной кавычки, используемой в sed.

#!/bin/sh
set myvarM='pqr'
sed 's/:P03:M15/:P02:M1$myvarM/' mychange.txt > new_mychange.txt

Могу ли я изменить команду sed или использовать что-то еще?

Ответы [ 2 ]

2 голосов
/ 08 июля 2011
awk -v val="$myvarM" '{sub(/:P03:M15/, ":P02:M1" val); print}' filename

Обратите внимание, что в оболочке типа Bourne ("/ bin / sh") команда set устанавливает позиционные параметры. Ваша первая строка устанавливает $1 в значение myvarM='pqr' - переменная myvarM по-прежнему не установлена.

2 голосов
/ 08 июля 2011
#!/bin/sh
myvarM='pqr'
sed "s/:P03:M15/:P02:M1$myvarM/" mychange.txt > new_mychange.txt

Кстати, чтобы сделать замену на месте (т.е. не создавать новый файл, а изменить исходный файл), сделайте следующее:

sed -i '' "s/:P03:M15/:P02:M1$myvarM/" mychange.txt

Это говорит "использовать пробел в качествеинкрементный суффикс "- т.е. записать то же имя файла, что и для ввода

...