找到一个字符串并添加多个保存在变量中的字符串

时间:2012-08-13 14:55:54

标签: linux bash shell sed awk

我一直在尝试很多方法而没有运气。我有一个名为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

3 个答案:

答案 0 :(得分: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对换行符进行编码。

答案 1 :(得分:0)

在perl中尝试它,似乎工作正常:

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

答案 2 :(得分:0)

这可能适合你(GNU sed):

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

N.B。变量中的\\和变量由sed命令中的"括起。