awk - 如果文件替换包含反斜杠,则查找并替换给出错误
问题描述
我有一个文件,我必须在其中找到String
并替换它。当我使用 sed 时它给了我错误,因为替换字符串包含“/”。
replace_string=6W4kngjd3c7oOShnG7iWYQpZVzr4S88G20fujmP7cdM1m5Gw550WfMD38DA4g6O4qxUIJJwt2OtLTRmh7vWz+AWQVmIMajk3OylEfR/X+afrD6YOeGLYHU6Ef4DYv/3x
sed -i -e 's|string|'$replace_string'|g' $FILEPATH
这是它给出的错误 -
sed: -e expression #1, char 38: unterminated `s' command
除了 sed 或我可以使用 sed 的任何其他方式之外,还有其他方法吗?
解决方案
sed 不理解文字字符串(请参阅Is it possible to escape regex metacharacters with sed 可靠),只有不包含您使用的任何分隔符的正则表达式和启用反向引用的替换。如果您想替换字符串,请使用能够理解字符串的工具,例如 awk,例如,这适用于字符串中的任何字符(代码需要调整以处理old
单行内的换行符或多个替换):
old='string1' new='string2' awk '
BEGIN {
old = ENVIRON["old"]
new = ENVIRON["new"]
lgth = length(old)
}
s = index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+lgth) }
{ print }
' file
推荐阅读
- sql - sql查询排序但在顶部显示特定值
- perl - Perl 用字符串死而不附加文件名和行号
- r - Rmarkdown Beamer 演示,xcolor 的选项冲突
- sql - 在没有任何明确搜索条件的情况下从长字符串中获取字符串
- traefik - Traefik 前端重定向不起作用
- r - R:将列表的所有 s4 对象合并为一个
- c# - 新的非聚集索引引发死锁
- rabbitmq - 使用 Spring AMQP 和 RabbitMQ HA 进行故障转移
- c# - 在 C# 中从 Share point office 365 读取 Excel 文件
- javascript - 将 jquery 事件与相同的类名元素分开