2010-07-08 30 views
14

Ben yürütmek aşağıdaki bash komut ile bir betik değişkeni kullanmaktır . Bunun yerine, literal metin $ sürümü ekleniyor.nasıl sed

Bunun yerine sedgmentin geçerli değerini kullanmak için ne yapmalıyım?

cevap

17
sed "s/\${version.number}/$version/" template.txt > readme.txt 

Sadece çift tırnak işareti dolar işareti ile değiştirilir. Bu aynı zamanda tek tırnakların dolar işaretinin kaçmasını gerektirmediği anlamına gelir.

+0

Ama dolar işareti ifadesi sed' 'tarafından regex olarak kabul edilir, çünkü kaçan gerekmektedir. Yani bence '' olmalı. – Philipp

+1

@Philipp, aslında '$' işareti, regex'in (veya muhtemelen alt ifadenin) son karakteri olduğunda sadece bir ankrajdır. Ama itiraf ettim ki şanslıyım. ;) İsteğe bağlı olarak kaçmış bir eğik çizgi ekleyebilirsiniz, ancak daha sonra '\\\ $'. –

+0

Düzeltme için teşekkürler. – Philipp

4

Ayrıca sadece Biraz eski değişkenleri

sed 's/'${version.number}'/'$version'/' template.txt > readme.txt 
+0

Bu en iyi çalıştı. – Val

0

unquote olabilir, ama yine de benim için o takdirde Philip söylediği gibi çift kaçış kullanarak (ve parantezi kaçan çalıştı ... yararlı olabilir siz) ... bunları kullanmak:

#!/bin/bash 
LIVE_DB_NAME='wordpress'; 
STAGING='staging'; 
sed -r "s/define\('DB_NAME', '[a-zA-Z0-9]+'\);/define('DB_NAME', '\\${LIVE_DB_NAME}');/" ${STAGING}/wp-config.php >tmp1;