2012-08-13 37 views
1

之前添加多個保存在變量中的內襯字符串我一直在嘗試很多方法,但沒有運氣。我有一個名爲test.txt的文件,它有一些lorem ipsum和文本[staging:production]我只想添加幾行,我保存在一個變量之前。查找一個字符串並在

如果你能解釋我在哪裏出錯了,下面的任何內容都將非常感謝!

#!/bin/bash 

test="lala\ 
kjdsh" 

sed '/^#$/{N; /[staging: production]/ i \ 
<Location /cgis> \ 
</Location>\ 

}' ./test.txt 


sed -i -e 's/\[staging\: production\]/\$test/g' ./test.txt 
#sed -i 's/Lorem/beautiful/g' test.txt 

#awk -v data=$test '{A[NR]=$0}/\[staging\: production\]/{ print data }' test.txt > testfile.txt 

#read -a text <<<$(cat test.txt) 
#echo ${#text[@]} 
#for i in ${text[@]}; 
#do 
# echo -n $i; 
# sleep .2; 
#done 

#ed -s test.txt <<< $'/\[staging\: production\]/s/lalalala/g\nw' 

#awk -v data=$test '/\(/\[staging\: production\]\)/ { print data }' test.txt > testfile.txt 

# && mv testfile.txt test.txt 

#sed -i -e '/\(\[staging\: production\]\)/r/$test\1/g' test.txt 

#sed "/\(\[staging\: production\]\)/s//$test\1/g" test.txt 
+0

當您使用反斜槓作爲續行字符時,行連接就像沒有換行符一樣。刪除反斜線並保留換行符。 – 2012-08-13 23:37:22

回答

1
sed -i -e 's/\[staging\: production\]/\$test/g' ./test.txt 

不會起作用,因爲裏面燎報價BASH不會擴大\$test
因此,您不需要轉義$

如果你想與變量$test的內容來代替做:

sed -i -e 's/\[staging: production\]/'$test'/g' ./test.txt 

你也不需要逃避:

要插入之前,你的模式工作對我來說是這樣的:

sed -i -e '/\[staging: production\]/ i '$test'' ./test.txt 

但是爲了保留我需要定義的變量內部的換行符:

test="lala\nkjdsh" 

請注意\n爲換行符編碼。

+0

這似乎是工作,但是,它不保留我的變量中的新行。 – gazzwi86 2012-08-13 15:31:05

+0

我不斷收到sed:1:「/ \ [staging:production \ ...」:命令我希望\後面跟着文字 – gazzwi86 2012-08-13 15:37:39

+0

就像我說的 - 我必須通過'\ n'在變量內編碼換行符 - 確實保留了我的環境中的換行符。 – 2012-08-13 15:39:18

0

嘗試在Perl中,它似乎很好地工作:

perl -pe '{$rep="what\nnow"; s/(\[foo foo2\])/$rep$1/}' file 
0

這可能會爲你工作(GNU SED):

test="lala\\         
kjdsh" 
sed '/\[staging: production\]/i\'"$test" test.txt 

注: \\在變量中,變量在sed命令中被"'s包圍。

相關問題