免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1629 | 回复: 4
打印 上一主题 下一主题

[文本处理] sed替换中\\\ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-08-17 17:21 |只看该作者 |倒序浏览
本帖最后由 venustef 于 2015-08-18 10:23 编辑

预替换的目标字符串
ALL        vmstat 5 > ${VIEW_DIR}/vmstat_${STATION_ID}_`date +%T`.log
想要将该字符串中${VIEW_DIR}替换成已声明的环境变量的具体值
sed -e "s:\\\${VIEW_DIR}:${VIEW_DIR}:g"
请问这里面的"\\\"是怎么转义的?经过试验好像是两个"\\"也能达到相同效果,但是一个"\"就不行
这是什么用法?求解释,多谢


再把我的问题具体一下
cat sedtest.sh
#!/bin/sh
VIEW_DIR=$1
command=`cat temp.txt| grep "VIEW"`
command=`echo "$command" | sed -e "s:\${VIEW_DIR}:$VIEW_DIR:"`
echo "$command"

cat temp.txt
vmstat 5 > ${VIEW_DIR}/vmstat

当s:\${VIEW_DIR}:$VIEW_DIR:时,没有替换
> ./sedtest.sh 1
vmstat 5 > ${VIEW_DIR}/vmstat

当s:\\${VIEW_DIR}:$VIEW_DIR:时,替换成功

> ./sedtest.sh 1
vmstat 5 > 1/vmstat


这个怎么理解啊?thanks

论坛徽章:
7
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:57:092015小元宵徽章
日期:2015-03-06 15:58:18程序设计版块每日发帖之星
日期:2015-08-09 06:20:00每日论坛发贴之星
日期:2015-08-09 06:20:00程序设计版块每日发帖之星
日期:2015-08-22 06:20:00程序设计版块每日发帖之星
日期:2015-08-27 06:20:00
2 [报告]
发表于 2015-08-18 09:09 |只看该作者
  1. [unar@localhost testData]$ a=1
  2. [unar@localhost testData]$ cat test.txt
  3. ${a}
  4. [unar@localhost testData]$ sed 's/\${a}/'$a'/' test.txt
  5. 1
  6. [unar@localhost testData]$ sed 's/\\${a}/'$a'/' test.txt
  7. ${a}
  8. [unar@localhost testData]$ sed 's/\\\${a}/'$a'/' test.txt
  9. ${a}
复制代码
应该是只有一个是可以的吧。把$转义了。

http://bbs.chinaunix.net/forum.p ... ;page=16#pid2934852

论坛徽章:
0
3 [报告]
发表于 2015-08-18 10:20 |只看该作者
回复 2# tuyajie


    再把我的问题具体一下
cat sedtest.sh
#!/bin/sh
VIEW_DIR=$1
command=`cat temp.txt| grep "VIEW"`
command=`echo "$command" | sed -e "s:\${VIEW_DIR}:$VIEW_DIR:"`
echo "$command"

cat temp.txt
vmstat 5 > ${VIEW_DIR}/vmstat

当s:\${VIEW_DIR}:$VIEW_DIR:时,没有替换
> ./sedtest.sh 1
vmstat 5 > ${VIEW_DIR}/vmstat

当s:\\${VIEW_DIR}:$VIEW_DIR:时,替换成功

> ./sedtest.sh 1
vmstat 5 > 1/vmstat


这个怎么理解啊?thanks

论坛徽章:
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
4 [报告]
发表于 2015-08-18 10:55 |只看该作者
反引号里面的斜线本身也需要被转义,所以需要两个
  1. command=`echo "$command" | sed -e "s:\\${VIEW_DIR}:$VIEW_DIR:"`
复制代码
如果你改用$()的话,一个斜线就够了
  1. command=$(echo "$command" | sed -e "s:\${VIEW_DIR}:$VIEW_DIR:")
复制代码

论坛徽章:
0
5 [报告]
发表于 2015-08-18 11:11 |只看该作者
回复 4# Shell_HAT


    试验了一下,果然是这样,太感谢了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP