我一直在尝试很多方法而没有运气。我有一个名为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 :(得分: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命令中的"
括起。