逐字与sed匹配

时间:2017-11-16 11:06:35

标签: sed

我有一对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不会逐字解释。

1 个答案:

答案 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