2016-05-12 5 views
4

私はSQLファイル(samplesqlfile)を持っていますが、バッククォートを含む文字列を別の文字列に置き換えたいと思います。以下はコードです。ファイル内でバックティックを含む単語を置き換えるUNIXシェル

actualtext="FROM sampledatabase.\`Datatype\`" 
replacetext="FROM sampledatabase.\`Datatype_details\`" 
sed -i "s/\<${actualtext}\>/${replacetext}/g" samplesqlfile 

これは機能しません。置き換えられる実際の単語は

FROM sampledatabase.`Datatype` 

バックスティックをエスケープするためにバックスラッシュを追加しました。しかし、まだそれは動作していません。助けてください。

答えて

3

が、これは動作しないことを確認します

$ sed "s/\<${actualtext}\>/${replacetext}/g" samplesqlfile 
FROM sampledatabase.`Datatype` 

しかし、この処理が行われます。

$ sed "s/\<${actualtext}/${replacetext}/g" samplesqlfile 
FROM sampledatabase.`Datatype_details` 

問題が\>ました。文字列変数$actualtextは単語文字で終了しません。それは引用符で終わります。その結果、\>は決してそこに一致しません。解決策は、\>を削除することです。

明確にするために、\>は、単語文字と単語文字の境界に一致し、単語文字が最初に表示されます。ワード文字には、英数字またはアンダーラインを使用できます。

\>はGNU拡張です。 BSD/OSX sedの動作は異なるでしょう。

ここでは説明のために、-iオプションを削除しました。もちろん、あなたの意図した使用のために、それを元に戻してください。

+1

はい...それが問題でした。あなたは私の時間を救った...ありがとう。 – user2349253

関連する問題