【发布时间】:2013-12-23 17:08:00
【问题描述】:
我正在尝试编写一个 shell 脚本来替换我使用 sed 选择的任何字符/字符串。我的第一次尝试除了特殊字符外。我一直在尝试使用 sed 来修复特殊字符,以便它们也将被搜索或替换。我决定为了测试目的而简化脚本,只处理一个冒犯的角色。但是,我仍然遇到问题。
编辑脚本
#! /bin/sh
oldString=$1
newString=$2
file=$3
oldStringFixed=$(echo "$oldString" | sed 's/\\/\\\\/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\[/\\\[/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\]/\\\]/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\^/\\\^/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\*/\\\*/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\+/\\\+/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\./\\\./g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\$/\\\$/g')
oldStringFixed=$(echo "$oldStringFixed" | sed 's/\-/\\\-/g')
sed -e "s/$oldStringFixed/$newString/g" "$file" > newfile.updated
mv newfile.updated "$file"#! /bin/sh
如果不清楚,我正在尝试在 oldString 中搜索 [ 字符,并将其替换为转义版本并将结果分配给 oldStringFixed(我需要反引号吗?)。下面两行是我认为可以正常工作的原始脚本的略微修改版本。
当我回显固定字符串时,没有任何显示,sed 输出错误
sed: can't read [: No such file or directory
谁能解释我的第一条 sed 行有什么问题?
编辑:
感谢 Jite,脚本运行得更好。但是,我仍然有用空格替换单引号字符的问题,即'*'。上面是新版本。
【问题讨论】:
-
specias char 比“[”之类的要多得多。 \ * + ?对于 OldString 和 \ & / 对于 newString
-
非常类似于this问题。