使用sed替换shell脚本中的特殊字符
发布时间:2020-11-17 11:47:41 所属栏目:Linux 来源:互联网
导读:我正在尝试编写一个 shell脚本,它将替换我使用sed选择的任何字符/字符串.我的第一次尝试使用特殊字符除外.我一直在尝试使用sed修复特殊字符,以便搜索或替换它们.我决定简化用于测试目的的脚本,并且只处理一个违规角色.但是,我仍然遇到问题. 编辑脚本 #! /bin/
我正在尝试编写一个 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,脚本运行得更好.但是,我仍然遇到用空格替换单引号字符的问题,即’*’.新版本在上面. 解决方法我建议两个改进:>不要像你那样堆栈对sed的调用,而是将它们全部打包在一个函数中,如下面的escape_string. 通过这些更改,您的脚本如下所示: #! /bin/sh oldString="$1" newString="$2" file="$3" escape_string() { printf '%s' "$1" | sed -e 's/[][^*+.$-]/1/g' } fancyDelim=$(printf ' 01') oldStringFixed=$(escape_string "$oldString") sed -e "s$fancyDelim$oldStringFixed$fancyDelim$newString${fancyDelim}g" "$file" > newfile.updated mv newfile.updated "$file" (编辑:百色站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- linux – ssh multi-hop上的“bash:nc:command not found
- LINUX学习:Linux磁盘空间占满故障解决方法
- 如何解释NFS crossmnt参数?
- linux-kernel – 编译Linux内核错误xt_CONNMARK.h
- Linux:将100万个文件移动到基于前缀的创建文件夹中
- Zynq 7000上的嵌入式Linux,几乎丢弃了所有UDP数据包
- linux – 与ext4结合使用的透明压缩文件系统
- macos – 如何在OS X上使用ditto在Linux上像cp -a一样工作
- curl在超时时重试
- /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
推荐文章
站长推荐
- 在Linux中安装另一个Perl?
- Install Tomcat 6 on CentOS or RHEL --转载
- linux下如何修改weblogic console登陆的用户名和
- 嵌入式 – arm-linux-gcc vs arm-elf-gcc
- linux – 任何方式来指定配置文件数据的位置
- kernel-module – 内核之间的Linux内核模块(* .k
- linux-kernel – dirty_expire_centisecs的实现
- search – sed:无法读取:没有这样的文件或目录
- linux – bash / Makefile中双符号的意思是什么?
- 从curl管道运行时跳过macos – bash read
热点阅读