Прежде всего, обратите внимание, что ваш сценарий sed
на самом деле должен использовать \${PRODUCT_NAME}
вместо ${PRODUCT_NAME}
в качестве шаблона поиска, потому что в базовом регулярном выражении POSIX $
означает скорее "конец строки"чем «знак доллара».Это из пути.,.
В Bash вы можете либо заключить в кавычки знак доллара с обратной косой чертой:
echo "Replace \${PRODUCT_NAME} with $1 in document.txt"
for file in $(grep -il ${PRODUCT_NAME} ~/Documents/tmp/document.txt)
do
sed -e "s/\\\${PRODUCT_NAME}/$3/g" $file > /tmp/tempfile.tmp
mv /tmp/tempfile.tmp $file
done
, либо использовать одинарные кавычки (которые похожи на двойные кавычки, за исключением того, что они неразрешить расширение на основе $
и не обрабатывать \
):
echo 'Replace ${PRODUCT_NAME} with '"$1 in document.txt"
for file in $(grep -il ${PRODUCT_NAME} ~/Documents/tmp/document.txt)
do
sed -e 's/\${PRODUCT_NAME}/'"$3/g" $file > /tmp/tempfile.tmp
mv /tmp/tempfile.tmp $file
done
(Кстати, намеренно ли ваша строка echo
использует $1
, а ваша sed
строка использует $3
? Кажется, они оба должны использовать один и тот же параметр.)