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
4

3 回答 3

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对换行符进行编码。

于 2012-08-13T15:23:30.747 回答
0

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

perl -pe '{$rep="what\nnow"; s/(\[foo foo2\])/$rep$1/}' file
于 2012-08-13T15:19:22.280 回答
0

这可能对您有用(GNU sed):

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

变量中的NB\\和变量"在 sed 命令中被 's 包围。

于 2012-08-13T19:24:50.313 回答