免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: lmx07
打印 上一主题 下一主题

[文本处理] sed 中替换内容有/怎么办? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-01-09 10:37 |只看该作者
sed 's/$libdir/\/usr\/local\/pgsql/'

论坛徽章:
0
12 [报告]
发表于 2013-01-09 11:26 |只看该作者
Shell_HAT 发表于 2013-01-08 18:20
回复 7# lmx07


str="/usr/local/pgsql"

sed "s#$libdir#$str#g" urfile


我试了一下为什么结果是$str而变量的值没有被替换进去呢?请高手解答下

论坛徽章:
0
13 [报告]
发表于 2013-01-09 11:29 |只看该作者
本帖最后由 aimar111 于 2013-01-09 11:59 编辑

例如
[root@cent sed]# cat a.txt
$a
[root@cent sed]# b=1b
[root@cent sed]# echo $b
1b
[root@cent sed]# sed 's/\$a/\$b/g' a.txt
$b

$a并没有被替换成1b这是为什么?

问题已解决

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
14 [报告]
发表于 2013-01-09 12:31 |只看该作者
回复 13# aimar111
  1. sed "s/\$a/$b/g" a.txt
复制代码

论坛徽章:
0
15 [报告]
发表于 2013-01-09 14:41 |只看该作者
Shell_HAT 发表于 2013-01-08 18:20
回复 7# lmx07


非常不错!只要在正则两边扩起来就好了。

论坛徽章:
0
16 [报告]
发表于 2013-01-09 16:27 |只看该作者
[font size=7]讨论这么热烈啊,

新手注意啦。
1. $libdir 在写的时候$需要转义 sed "s/\$libdir/someThingElse/g" file
2. sed里面有变量的话,需要用双引号,而不是单引号
3. 用其他符号来代替/ ,可以不用那么多的转义,显得更清晰

最后,谢谢大家参与讨论。

论坛徽章:
0
17 [报告]
发表于 2013-01-09 16:29 |只看该作者
本帖最后由 油条回锅肉 于 2013-01-09 16:29 编辑

回复 14# Shell_HAT
  1. [root@localhost shell]# cat a
  2. $a
  3. [root@localhost shell]# cat a
  4. $a
  5. [root@localhost shell]# echo $str
  6. usr/local/pgsql
  7. [root@localhost shell]# sed 's#$a#$str#g' a
  8. $str
  9. [root@localhost shell]# sed "s#$a#$str#g" a
  10. sed: -e expression #1, char 0: no previous regular expression
  11. [root@localhost shell]# sed 's/\$a/$str/g' a   
  12. $str
  13. [root@localhost shell]# sed "s/\$a/$str/g" a   
  14. sed: -e expression #1, char 10: unknown option to `s'
复制代码
这两个报错怎么回事啊

论坛徽章:
33
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3720周年集字徽章-周	
日期:2020-10-28 14:13:3020周年集字徽章-20	
日期:2020-10-28 14:04:3019周年集字徽章-CU
日期:2019-09-08 23:26:2519周年集字徽章-19
日期:2019-08-27 13:31:262016科比退役纪念章
日期:2022-04-24 14:33:24
18 [报告]
发表于 2013-01-10 10:49 |只看该作者
回复 17# 油条回锅肉


第九行报错是因为a这个变量是空的,实际执行的是:
sed "s##$str#g" a

第13行报错是因为str这个变量的值里面包含特殊字符/,实际执行的是:
sed "s/\$a/usr/local/pgsql/g" a

论坛徽章:
0
19 [报告]
发表于 2013-01-10 11:52 |只看该作者
牛      


您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP