2011-07-19 4 views
1

よく。あなたの親切な助けをありがとう。私はあなたのことから、sedの変数を使うことを学びました。私たちは ''の代わりに ""を使わなければなりません。しかし、私の場合は、変数を使用せずに ''を使う前にうまくいきます。 ""と変数($ title、$ web、$ desc)を使用した後、それはもはや機能しません。理由は何ですか?ありがとう。 ![CDATA [::イベントが見つからない、実際に私私はそれがエラーを消す代わりに、スクリプト全体 の別途それを実行している-bashsed問題での引用の使用について

sed -i "0,/<item pop="N">/ { s/<item pop="N">/<item pop="N">\n <title>News: $title<\/title>\n <guid>$web<\/guid>\n <link>$web<\/link>\n <description><![CDATA[<p>$desc<\/p>]]><\/description>\n <\/item>\n<item pop="N">/ }" /var/www/html/INFOSEC/english/rss/test.xml 

sed -i '0,/<item pop="N">/ { s/<item pop="N">/<item pop="N">\n <title>test1<\/title>\n <guid>test2<\/guid>\n <link>test3<\/link>\n <description><![CDATA[<p>test4<\/p>]]><\/description>\n <\/item>\n<item pop="N">/ }' /var/www/html/INFOSEC/english/rss/test.xml 

変数に何かを入力する必要があるため、一人で実行しないでください。

答えて

2

文字列内に"を使用しています。これらの文字はエスケープする必要があります。

また、シェルが文字をの中に入れずに""にエスケープする可能性があります。

""内のすべてのものを維持するが、\\\を交換し、\"" sのどちらか:あなたは、少なくとも二つのソリューション持っ

sed -i "0,/<item pop=\"N\">/ { s/<item pop=\"N\">/<item pop=\"N\">\\n <title>News: $title<... 

または2をミックスします。あなたは、変数、終了'を挿入する必要がある場合、""、および再入力'内のあなたの変数を入力します。

sed -i '0,/<item pop="N">/ { s/<item pop="N">/<item pop="N">\n <title>News: '"$title"'<... 
2

スイッチをオンにします。引用されたセクションが連続している限り、bashはそれらを1つの文字列とみなします。

sed -i '0,/<item pop="N">/ { s/<item pop="N">/<item pop="N">\n <title>News: '"$title"'<\/title>\n <guid>'"$web"'<\/guid>\n <link>'"$web"'<\/link>\n <description><![CDATA[<p>'"$desc"'<\/p>]]><\/description>\n <\/item>\n<item pop="N">/ }' /var/www/html/INFOSEC/english/rss/test.xml 
+0

私はそのテクニックを以前気づかなかった、ありがとう –

0

シェルが二重引用符の内側!を見たときバッシュhistory expansionがトリガされます。このため、「イベントが見つかりません」というエラーメッセージが表示されます。マニュアルから:

履歴拡張文字をエスケープするために '\'と '' 'のみ使用できます。あなたがこれを行うことができ

sed_script='0,/<item pop="N">/ { s/<item pop="N">/<item pop="N">\n <title>News: %s<\/title>\n <guid>%s<\/guid>\n <link>%s<\/link>\n <description><![CDATA[<p>%s<\/p>]]><\/description>\n <\/item>\n<item pop="N">/ }' 
sed -i "$(printf "$sed_script" "$title" "$web" "$web" "$desc")" /var/www/html/INFOSEC/english/rss/test.xml 

か(私はsedの専門家ではないが)、これは同じように動作しますか?それはより可読です

sed_script='/<item pop="N">/ a \ 
<title>News: %s</title> \ 
<guid>%s</guid>\n <link>%s</link> \ 
<description><![CDATA[<p>%s</p>]]></description> \ 
</item> \ 
<item pop="N">' 
sed -i "$(printf "$sed_script" "$title" "$web" "$web" "$desc")" /var/www/html/INFOSEC/english/rss/test.xml 
関連する問題