0

私は出力ファイルを書き込むためにいくつかの検索/置換を行っていますsedtee これがコマンドです。

    # $1 source
    # $2 Type
    # $3 name 
    # $4 body 

    sudo sed  "s/<!--ID-->/1/g"  ./templates/tpl.txt \
        | sed  "s/<!--AUTHOR-->/myname/g"  \
        | sed  "s/<!--TYPE-->/$2/g"  \
        | sed  "s/<!--BODY-->/$4/g"  \
        | sed  "s/<!--NAME-->/$3/g"  \
        | tee  "$3.txt" > /dev/null

出力ファイルでは、新しい行の代わりに「n」が表示されます。次と同じ効果が必要です(ただし、テンプレート置換後)

 echo -e "$4" > "$3.txt"

私はbash学習者であり、コードの提供を手伝ってください

編集

$ 4には、コメントなどを含む複数行の文字列(mysql関数/ procedureまたはtriggerなど)が含まれています

ありがとう

4

1 に答える 1

0

tee特権ファイルの作成に使用する場合は、を使用する必要がありsudoますtee

あなたは出来る:

sed < template/tpl.txt -e "
    s/<!--ID-->/1/g;
    s/<!--AUTHOR-->/myname/g;
    s/<!--TYPE-->/$2/g;
    s/<!--NAME-->/$3/g;
    /<!--BODY-->/{s/<!--BODY-->/$4/;s/\\n/\n/g;}
  " | sudo tee "$3" >/dev/null

他の方法:では、次を使用できます:

echo "${4//\\n/$'\n'}" 

それで:

sed "s/<!--BODY-->/${4//\\n/$'\n'}/;"

もうまくいく可能性があります。

Macのsed場合、これはより適切に機能する可能性があります。

sed < template/tpl.txt "s/<\!--ID-->/1/g;
     s/<\!--AUTHOR-->/myname/g;
     s/<\!--TYPE-->/$2/g;
     s/<\!--BODY-->/${4//\\n/\\$'\n'}/
  " | sudo tee "$3" >/dev/null

説明:bashismです。bash${4//\\n/\\$'\n'}するときに使用できます。Mac sedは改行としてサポートしていませんが、バックスラッシュでエスケープされている場合は改行をサポートしているため、RHSでは(bashで)書くことができます::\n\\n\\$'\n'

echo abc\\$'\n'def
abc\
def
于 2013-01-29T07:40:53.990 に答える