2017-11-16 10 views
0

私はペアのURLのリストを持っています - ペアの最初の要素のすべての出現を見つけて、それらを第2のものに置きたいと思います。私はこれにsedを使用しようとしていますが、sedはURLの文字をエスケープします。 sedにこれらのURLが見つかるようにする方法はありますか?verbatimとsedとの照合

while read -r NAME 
do 
    ARG1=`echo "$NAME" | awk '{print $1}'` 
    ARG2=`echo "$NAME" | awk '{print $2}'` 
    echo "$ARG1" 
    echo "$ARG2" 
    sed -i "[email protected][email protected][email protected]" file 
done < pagetable 

ページテーブルは、URLのペアを持っている、と私は検索を行うと、「ファイル」に置き換えています:

は、ここに私のコードです。私のURLは特殊文字を持っているので、sedはそれらをそのまま解釈していません。

+0

期待どおりに置き換えられなかったサンプルURLを教えてください。 – thanasisp

答えて

0

sedを呼び出す前に、検索パターン(\*^$./および置換文字列&/)にメタキャラクタを交換します。これは、スクリプトがBashによって実行されていることを前提としています。

ARG1="${ARG1//\\/\\\\}" 
ARG1="${ARG1//\*/\\\*}" 
ARG1="${ARG1//\//\\/}" 
for mc in \^ \$ \.; do ARG1="${ARG1//$mc/\\$mc}"; done 
ARG2="${ARG2//\\/\\\\}" 
ARG2="${ARG2//\//\\/}" 
ARG2="${ARG2//&/\\&}" 
sed -i "s/$ARG1/$ARG2/g" file