sed关于变量替换的问题

今天说一下sed变量替换的问题
这个问题主要还是一个群友提问的
开始我也没有做出来

[email protected]:~/pwb/tmp# echo $a
9
[email protected]:~/pwb/tmp# sed ‘s/1/$a/g‘
^C
[email protected]:~/pwb/tmp# echo 123|sed ‘s/1/$a/g‘
$a23

就像是这样带着变量的替换
后来查了以下资料
有一种比较简单的方法
主要就是平时我们用sed的时候都是用的单引号
这里替换变量就是因为bash并没有转义需要使用双引号

[email protected]:~/pwb/tmp# echo 123|sed "s/1/$a/g"
923
[email protected]:~/pwb/tmp# echo $a
9

还有一种比较极端的情况就是变量里含有/

[email protected]:~/pwb/tmp# echo "123/abc/123"
123/abc/123
[email protected]:~/pwb/tmp# a=3/a
[email protected]:~/pwb/tmp# echo $a
3/a
[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s/$a//g"
sed:-e 表达式 #1,字符 7:“s”的未知选项

这样的话将$a变量转化完毕、会多出来/
那么这样的话怎么办
最简单的做法就是将sed的分隔符给变了
将 / 改成 #

[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s#$a##g"
12bc/123
[email protected]:~/pwb/tmp#

这样就可以了
但是根据这个问题一直研究下去的就是
如果一个变量既有/又有#的话那么该怎么办
我表示无能为力哈哈
说白了就是不断改变分割符的问题
就事论事吧

[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s,$a,,g"
12bc/123
[email protected]:~/pwb/tmp# echo "123/abc/123"|sed "s;$a;;g"
12bc/123

其实sed可以用很多符号做分隔符、但是请不要使用sed的一些正则即可、比如,;都可以

时间: 2024-10-22 23:06:35

sed关于变量替换的问题的相关文章

通过sed将一个变量替换另外一个变量

原始文件 networks: default: ipam: config: - gateway: 10.255.3.1 subnet: 10.255.3.0/24 driver: default services: authorization: depends_on: - database environment: ENABLE_AUTHORIZATION: 'false' JDBC_URL: jdbc:h2:tcp://database:1521/uaa;DATABASE_TO_UPPER=f

sed 变量替换和Linux的特殊符号大全

1 sed支持两种方式的变量替换,建议使用下面的第二种,比较简单 这样就可以给变量a赋值很多特殊字符了,比如 赋值a='!@#¥%……' sed -n 's/echo/'"$a"'/p' aased -n "s/echo/$a/p" aa 2 Linux特殊字符大全,参见链接吧 shell转义字符 字符 说明 ‘’ 单引号,硬转义,其内部所有的shell元字符.通配符都会被关掉.注意,硬转义中不允许出现’(单引号). 被单引号用括住的内容,将被视为单一字串.在引号内

[转]shell 变量替换

转自:http://blog.csdn.net/xuhongning/article/details/6191515 1,参数替换: 不含有“:”的,只要定义了,就生效,不管是否为空 含有“:”的,即使定义了,但是为空就不生效 用来替换的内容可以是字符串.一个变量.命令的输出 被替换的内容是变量,如$a.$1等 1)默认值替换,如果变量$var没有定义,则整体值为default字符串,但var变量本身并没有被设置: ${var-default}                    如果var定

shell脚本之变量替换

代码如下 #!/bin/bash a=123 let "a += 1" echo a=$a echo b=${a/12/BB} echo "b=$b" 执行结果为 a=124 b=BB4 b=${a/12/BB} 变量a中的值12被替换为BB,所以$b=BB4 shell脚本之变量替换,布布扣,bubuko.com

使用变量替换批量部署GoldenGate

GoldenGate运行时允许在参数文件中动态指定一个值,即在参数文件中使用一个变量,而不是一个静态的值,当启动OGG进程时,根据环境动态加载此变量的值,达到在不同环境中,通过变量定义,实现多个环境的相同配置部署.对于一对多或多对一的场景,此配置可以降低维护的复杂性. 如下,是一个标准的data pump参数设置: extract peast rmthost oelora114, mgrport 15051 rmttrail ./dirdat/pe passthru table east.*;

Linux Gvim shell 替换:变量替换,命令替换,转义字符

替换:如果表达式中含有特殊字符,shell会进行替换.例如在双引号中使用变量就是一种替换.转义字符也是一种替换 #!/bin/bash a=10 echo -e "Value of a is ${a} \n" #-e表示对转义字符替换,不加的话输出如下# echo "Value of a is ${a} \n" 转义字符替换 下列转义字符可用于echo 1.       \\     反斜杠        2.    \a     警报,响铃 ?3.   \b  

Shell变量替换,命令替换,转义字符

如果表达式中包含特殊字符,Shell 将会进行替换.例如,在双引号中使用变量就是一种替换,转义字符也是一种替换. 举个例子: #!/bin/bash a=10 echo -e "Value of a is $a \n" 运行结果: Value of a is 10 这里 -e 表示对转义字符进行替换.如果不使用 -e 选项,将会原样输出: Value of a is 10\n 下面的转义字符都可以用在 echo 中: 转义字符 含义 \\ 反斜杠 \a 警报,响铃 \b 退格(删除键)

dwz的form表单中url的变量替换

form表单中action的地址格式 “__URL__/edit/{xxx}”,大括号内的 “xxx” 就是变量名,主要功能是结合table组件一起使用. 下图中的删除.编辑.修改密码都是用了url变量替换: 删除.编辑.修改密码使用了变量{sid_user},特别需要注意的是变量命名的格式,必须以"sid_"开头,这样后台可以直接以变量"sid"接收. <tbody>中<tr target="sid_user" rel=&qu

Shell函数,Shell数组,变量替换

定义函数 function 函数名 { 函数的功能体 ...... } 函数名(){ 函数的功能体 ...... } 如何调用函数 函数名 函数的使用规则? 1)先定义后调用,可以只定义不调用 2)定义放上面,调用放下面 3)函数名区分大小写 4)函数名相同,后定义的生效 5)函数名不准使用特殊符号和关健字 6)在函数体内定义的变量叫局部变量,只能在当前函数内使用 7)在函数体外定义的变量叫全局变量 8)在第二个函数里敲上第一个函数的函数名,这样可以调用第一个函数的变量 例 #!/bin/bas