我有一对URL列表 - 我想找到该对的第一个元素的所有出现,并用第二个替换它们。我尝试使用sed,但sed在我的URL中转义字符。有没有办法让sed找到这些URL(不改变我的对)?
这是我的代码:
while read -r NAME
do
ARG1=`echo "$NAME" | awk '{print $1}'`
ARG2=`echo "$NAME" | awk '{print $2}'`
echo "$ARG1"
echo "$ARG2"
sed -i "s@$ARG1@$ARG2@g" file
done < pagetable
pagetable有一对URLS,我正在&#39;文件&#39;中进行查找和替换。由于我的网址有特殊字符,因此sed不会逐字解释。
答案 0 :(得分: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