1

私はかなりの数の方法を試してきましたが、運がありませんでした。いくつかの lorem ipsum とテキスト [staging: production] を含む test.txt という名前のファイルがあります。その前に、変数に保存した数行を追加したいだけです。

以下のいずれかでどこが間違っているかを説明していただければ幸いです。

#!/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 に答える