sed替换特殊字符

shell脚本经常会使用替换操作,sed用处很广,下列集中对一些使用场景做出总结:

1. 普通操作可以使用冒号(:)井号(#)正斜杠(/)来作为分隔符

    eg: sed -i 's#abc#def#g'  geng.file  ---将文件geng中的abc替换成def

          cat geng.file | sed  's/abc/def/g'   ---打印文件geng,并将其中的abc替换成def

2. 对于变量做替换

sed 若是单引号括起来的,变量上得再额外加个单引号才能引用生效;

       若是双引号括起来的,可直接引用生效

eg:  pa='127.0.0.1/32'; field='ip_allow=123'; \

      echo $field | sed 's#^ip_allow=.*#ip_allow=${pa}#g' 

     结果:ip_allow=${pa}  --变量替换未生效

      echo $field | sed 's#^ip_allow=.*#ip_allow='${pa}'#g'

     结果:ip_allow=127.0.0.1/32

      echo $field | sed "s#^ip_allow=.*#ip_allow=${pa}#g"

     结果:ip_allow=127.0.0.1/32

3. 特殊字符替换,反斜杠、正斜杠、双引号、$美元符

单个转义:多加个反斜杠做转义即可:反斜杠(\\)、正斜杠(\/)、双引号(\")

单转多个:参考如下列表

实现目标方法能否用单引号还是双引号括起来
单引号双引号为什么
反斜杠(\)替换成两个反斜杠(\\)

sed -i 's#\\#\\\\#g' file

或sed -i 's:\\:\\\\:g' file

×反斜杠用双引号括起来会报错
反斜杠(\)替换成正斜杠(/)sed -i 's#\\#\/#g' file×反斜杠用双引号括起来会报错
双引号(")替换成两个双引号("")

sed -i 's#\"#\"\"#g' file

sed -i "s#\"#\"\"#g" file

单引号(')替换成两个单引号('')sed -i "s#'#''#g" file×不能用单引号括起来,分不清了
美元符($)替换成\$sed -i 's:\$:\\\$:g' file×不能用双引号,否则会认为是$(正则匹配结尾位置)行的结果追加字符呢

正斜杠(/)可以用单引号、双引号括起来进行替换;但是涉及到反斜杠(\)不行,不能用双引号,只能用单引号括起来替换,不然报错:sed: -e expression #1,char 8: unterminated `s' command

4. curl时用的变量,sed转化

curl -H 'Content-Type: application/json' -X POST -d 参数

参数中涉及到特殊字符都得转义,而且要多转一层,即$得转成\\$,才能原封不动的供后续使用)

#值替换单引号、反斜杠、双引号 curl的时候用,多一层转义,所以\要用\\

sed -i "s#'#''#g" ${file}      ---单引号要转成两个单引号

sed -i 's#\\#\\\\\\\\#g' ${file}    ---反斜杠

sed -i "s:\":\\\\\":g" ${file}      ---双引号

sed -i 's:\$:\\\\\$:g' ${file}    ---美元符

curl引用参数的这种形式有两种写法:

1.直接引用单个参数变量

curl -H 'Content-Type: application/json' -X POST -d '{"type":"0","name":" ' ${pa_name} ' "}'

这种需要对变量额外加上一个单引号,才能引用生效!

2.整个参数变量作为一个整体(推荐)

param="{\"type\":\"0\", \"name\":\"${pa_name}\"}"

curl -H 'Content-Type: application/json' -X POST -d "${param}"

  • 9
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: sed命令可以用来替换字符串的字符。具体操作如下: 1. 用sed命令打开需要替换的文件,例如: ``` sed -i 's/oldstring/newstring/g' filename ``` 其,-i选项表示直接修改文件,oldstring表示需要替换的字符,newstring表示替换后的字符,g表示全局替换。 2. 如果需要替换多个文件,可以使用通配符,例如: ``` sed -i 's/oldstring/newstring/g' *.txt ``` 这样就可以替换所有txt文件的oldstring为newstring。 3. 如果需要替换的字符包含特殊字符,需要使用转义符号,例如: ``` sed -i 's/\/home\/user\/oldstring/\/home\/user\/newstring/g' filename ``` 其,\/表示/字符的转义。 希望以上回答能够帮到您。 ### 回答2: sed是一种流编辑器,常用于对文本进行编辑和转换。其一个常见的功能就是对字符串的字符进行替换。在sed,可以使用s命令来进行替换操作。 s命令的基本格式为:s/pattern/replacement/options 其,pattern表示要匹配的字符串模式,它可以是一个正则表达式。replacement表示要替换成的字符串,options则是可选参数,可以控制替换的方式和范围。 例如,要将文本文件所有的"apple"替换成"orange",可以使用以下命令: sed 's/apple/orange/g' filename 在这个命令,s表示替换操作,/g表示全局替换。这样,sed将会匹配所有的"apple"字符串,并将它们替换成"orange"。 除了直接替换字符串外,sed还支持一些高级替换操作。比如,在替换文本时,可以使用正则表达式来匹配更加复杂的模式。此外,还可以使用替换命令来删除或插入内容,以及将替换结果保存到文件。 总之,sed是一个非常强大的字符串替换工具,可以帮助我们高效地编辑和处理文本文件。在处理大量文本时,掌握sed的基本用法和高级技巧,将为我们的工作带来很大的便利。 ### 回答3: sed是一种流编辑器,用于对文本进行处理并进行替换、删除、添加等操作。在sed替换字符串的字符是一种常见的操作。下面介绍sed替换字符串的字符的基本语法和用法。 语法格式: ``` sed 's/要替换的字符/替换成的字符/g' 文件名 ``` 其,s为替换字符串的命令,/要替换的字符/为要替换的字符,/替换成的字符/为要替换成的字符,g为全局替换标志,表示替换所有出现的目标字符串,如果不加g标志,则只替换第一个出现的目标字符串。文件名为要执行替换操作的文件名,如果不指定文件名,则默认使用标准输入。 例如,执行以下命令: ``` sed 's/old/new/g' input.txt ``` 表示要替换input.txt文件所有的old为new。 除了简单的字符替换外,sed还支持正则表达式的替换操作。例如,执行以下命令: ``` sed 's/^[a-z]/&\./g' input.txt ``` 表示要将input.txt文件所有以小写字母开头的行的第一个字符替换为此字符和一个点,即在每个匹配字符前添加一个点。 此外,sed还支持将替换后的结果写入新文件、替换某一行的某个字符等高级用法。在使用sed进行字符串替换时,需要注意正则表达式的使用和目标字符串特殊字符转义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值