ann
最初の行は非常に複雑な値を保持する変数です。 2番目の行を使用する理由は、3番目の行では何も変更したくないからですcol1content
。置換を変更するには、2行目を別の変数に変更するだけです。
ann="<?php echo '<h2>'.views_get_view('frprev_ann')->get_title().'<\/h2>'; echo views_embed_view('frprev_ann'); ?>"
col1content=`echo $ann`
sed -i 's/r'$rownum'c1content/'$col1content'/g' templates/page--front.tpl.php
ただし、上記のコマンドを実行するとエラーが発生します。
sed: -e expression #1, char 19: unterminated `s' command
最初の行をに変更すると、ann="testtext"
すべてがスムーズに機能します。最初の行をに変更するとann="<?first second"
失敗します。バックスラッシュを使っても私には役に立ちません。
答え1
sed -i 's/r'$rownum'c1content/'"$col1content"'/g' templates/page--front.tpl.php
答え2
このようなテキストは確実に渡すことはできませんsed
。代替テキストでは、前にバックスラッシュを追加して引用符で区切る\
必要&
があります(通常)。正規表現部分には引用符と区切り文字が必要です。s
/
\[.*^$
また、シェルで追加の拡張のために変数値を保存します。変数の置換には常に二重引用符を使用してください。つまり、"$foo"
いいえ。二重引用符がない場合、値はスペースで区切られたスペースパターンのリストとして解釈されます$foo
\[?*
。
スクリプトの仕組みを変更したくない場合は、すべてを正しく引用してください。
ann="<?php echo '<h2>'.views_get_view('frprev_ann')->get_title().'</h2>'; echo views_embed_view('frprev_ann'); ?>"
col1content=$(echo "$ann" | sed 's/[\\\/&]/\\&/g')
sed -i "s/r${rownum}c1content/${col1content}/g" templates/page--front.tpl.php
または、スクリプトから環境変数を読み取ることができるawkまたはperlを使用してください。
ann="<?php echo '<h2>'.views_get_view('frprev_ann')->get_title().'</h2>'; echo views_embed_view('frprev_ann'); ?>"
awk -v ann="$ann" -v rownum="$rownum" '
BEGIN {pattern = "r" rownum "c1content"; }
1 {gsub(pattern, ann); print}
' templates/page--front.tpl.php >templates/page--front.tpl.php.new
mv templates/page--front.tpl.php.new templates/page--front.tpl