Error[8]: Undefined offset: 3, File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 121
File: /www/wwwroot/outofmemory.cn/tmp/plugin_ss_superseo_model_superseo.php, Line: 473, decode(

概述我正在尝试编写一个 shell脚本,它将替换我使用sed选择的任何字符/字符串.我的第一次尝试使用特殊字符除外.我一直在尝试使用sed修复特殊字符,以便搜索或替换它们.我决定简化用于测试目的的脚本,并且只处理一个违规角色.但是,我仍然遇到问题. 编辑脚本 #! /bin/sholdString=$1newString=$2file=$3oldStringFixed=$(echo "$ol 我正在尝试编写一个 shell脚本,它将替换我使用sed选择的任何字符/字符串.我的第一次尝试使用特殊字符除外.我一直在尝试使用sed修复特殊字符,以便搜索或替换它们.我决定简化用于测试目的的脚本,并且只处理一个违规角色.但是,我仍然遇到问题.

编辑脚本

#! /bin/sholdString=newString=file=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.updatedmv newfile.updated "$file"#! /bin/sh

如果不清楚,我试图通过oldString搜索[字符,并用转义版本替换它并将结果分配给oldStringFixed(我需要反引号吗?).底部两行是我原始脚本的略微修改版本,我相信它可以正常工作.

当我回显固定字符串时,不显示任何内容,并且sed输出错误

sed: can't read [: No such file or directory

谁能解释我的第一个sed线有什么问题?

编辑:

感谢Jite,脚本运行得更好.但是,我仍然遇到用空格替换单引号字符的问题,即’*’.新版本在上面.

解决方法 我建议两个改进:

>不要像你那样堆栈对sed的调用,而是将它们全部打包在一个函数中,如下面的escape_string.
>您可以为sed substitute命令使用精美分隔符,以避免与所涉及的字符串相关联的问题.

通过这些更改,您的脚本如下所示:

#! /bin/sholdString=""newString=""file=""escape_string(){   printf '%s' "" | sed -e 's/[][\^*+.$-]/\/g'}fancyDelim=$(printf '[+++]1')oldStringFixed=$(escape_string "$oldString")sed -e "s$fancyDelim$oldStringFixed$fancyDelim$newString${fancyDelim}g" "$file" \  > newfile.updatedmv newfile.updated "$file"
总结

以上是内存溢出为你收集整理的使用sed替换shell脚本中的特殊字符全部内容,希望文章能够帮你解决使用sed替换shell脚本中的特殊字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

)
File: /www/wwwroot/outofmemory.cn/tmp/route_read.php, Line: 126, InsideLink()
File: /www/wwwroot/outofmemory.cn/tmp/index.inc.php, Line: 166, include(/www/wwwroot/outofmemory.cn/tmp/route_read.php)
File: /www/wwwroot/outofmemory.cn/index.php, Line: 30, include(/www/wwwroot/outofmemory.cn/tmp/index.inc.php)
使用sed替换shell脚本中的特殊字符_系统运维_内存溢出

使用sed替换shell脚本中的特殊字符

使用sed替换shell脚本中的特殊字符,第1张

概述我正在尝试编写一个 shell脚本,它将替换我使用sed选择的任何字符/字符串.我的第一次尝试使用特殊字符除外.我一直在尝试使用sed修复特殊字符,以便搜索或替换它们.我决定简化用于测试目的的脚本,并且只处理一个违规角色.但是,我仍然遇到问题. 编辑脚本 #! /bin/sholdString=$1newString=$2file=$3oldStringFixed=$(echo "$ol 我正在尝试编写一个 shell脚本,它将替换我使用sed选择的任何字符/字符串.我的第一次尝试使用特殊字符除外.我一直在尝试使用sed修复特殊字符,以便搜索或替换它们.我决定简化用于测试目的的脚本,并且只处理一个违规角色.但是,我仍然遇到问题.

编辑脚本

#! /bin/sholdString=newString=file=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.updatedmv newfile.updated "$file"#! /bin/sh

如果不清楚,我试图通过oldString搜索[字符,并用转义版本替换它并将结果分配给oldStringFixed(我需要反引号吗?).底部两行是我原始脚本的略微修改版本,我相信它可以正常工作.

当我回显固定字符串时,不显示任何内容,并且sed输出错误

sed: can't read [: No such file or directory

谁能解释我的第一个sed线有什么问题?

编辑:

感谢Jite,脚本运行得更好.但是,我仍然遇到用空格替换单引号字符的问题,即’*’.新版本在上面.

解决方法 我建议两个改进:

>不要像你那样堆栈对sed的调用,而是将它们全部打包在一个函数中,如下面的escape_string.
>您可以为sed substitute命令使用精美分隔符,以避免与所涉及的字符串相关联的问题.

通过这些更改,您的脚本如下所示:

#! /bin/sholdString=""newString=""file=""escape_string(){   printf '%s' "" | sed -e 's/[][\^*+.$-]/\/g'}fancyDelim=$(printf '1')oldStringFixed=$(escape_string "$oldString")sed -e "s$fancyDelim$oldStringFixed$fancyDelim$newString${fancyDelim}g" "$file" \  > newfile.updatedmv newfile.updated "$file"
总结

以上是内存溢出为你收集整理的使用sed替换shell脚本中的特殊字符全部内容,希望文章能够帮你解决使用sed替换shell脚本中的特殊字符所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1049983.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存