免费注册 查看新帖 |

Chinaunix

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

sed如何替换特殊字符:单引号、大于号、等号? [复制链接]

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
11 [报告]
发表于 2007-12-14 14:13 |只看该作者
还是不解..郁闷..能不能说清楚点啊..非常感谢ailms的热情帮助..

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
12 [报告]
发表于 2007-12-14 15:26 |只看该作者
原帖由 ailms 于 2007-12-14 14:57 发表
单纯 \\'>和\\\'> 并没有区别,但你要放到整个 sed 的表达式,和前面的 " ' " 一起看啊,

加个 \ 就是为了去掉 ' 字符的 quoting 含义,变成一个普通字符




你指的和前面的"'"一起看?
[root@mail ~]# cat a
='
'>
\n
\r
[root@mail ~]# sed "s/'>/\\\'>/" a
='
\'>
\n
\r
[root@mail ~]#


红色的那个?还是后面那个?

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
13 [报告]
发表于 2007-12-14 15:38 |只看该作者
这我就有疑问了..后面的'> 前要加\前边的那个'>为什么不需要加\

论坛徽章:
0
14 [报告]
发表于 2007-12-14 15:47 |只看该作者
to  MYSQLER ,前面的解释有点问题,现在重新解释一下

sed "s/'>/\\'>/" 中,由于 \ 在 “ ”中保留其 escape 的作用,所以 "\\'>" 会被解释为 "\'>" ,

而送给 sed 后,应该是再一次转义为 "'>" 。

而 在 sed "s/'>/\\\'>/" 中,"\\\'>" 会被扩展为 "\\'>" ,送给 sed 就再转义就成为 "\'>" ,而现在的这个 \

不再具备 escape 的含义了,变成一个普通字符被输出

这就是我的理解 ^_^

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
15 [报告]
发表于 2007-12-14 15:58 |只看该作者
感谢ailms兄不耐其烦的指教

而送给 sed 后,应该是再一次转义为 "'>"

现在想知道的是sed本身为什么还要再转义一次?

论坛徽章:
0
16 [报告]
发表于 2007-12-14 16:02 |只看该作者
你可以看下面的例子


  1. Script started on Fri 14 Dec 2007 03:57:18 PM CST
  2. [root@home1 temp]# echo "\\\\"
  3. \\
  4. [root@home1 temp]# echo -e "\\\\"
  5. \
  6. [root@home1 temp]# echo "\\\\"|sed "s/.*/\\\\/"
  7. \
  8. [root@home1 temp]# exit
  9. exit

  10. Script done on Fri 14 Dec 2007 03:57:41 PM CST
复制代码


因为 "\\\\" 会别 shell 扩展为 "\\" ,现在的这两个 \\ 都没有了 escape 的功能,所以第一个 echo 输出的是两个 \

在第2个例子中,由于加了 -e ,会导致 echo 在 shell 扩展为 "\\" 再重新扫描一次,这样第1个 \ 就把第2个 \ 给 escape  了,所以就只输出1个 \ 而已

第3个例子就是为了证明上面我说的 sed 会把 "\'>" 再次扩展为 "'>" 的观点

不知道明白了吗?

论坛徽章:
0
17 [报告]
发表于 2007-12-14 16:03 |只看该作者
原帖由 MYSQLER 于 2007-12-14 15:58 发表
感谢ailms兄不耐其烦的指教

而送给 sed 后,应该是再一次转义为 "'>"

现在想知道的是sed本身为什么还要再转义一次?


没什么,温故而知新,我也加深了一些认识

论坛徽章:
0
18 [报告]
发表于 2007-12-14 16:04 |只看该作者
有问题今晚再说了,我今天的本本都重启 N 遍了

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
19 [报告]
发表于 2007-12-14 16:07 |只看该作者
顺便问一下

  1. [root@shell]# echo "\\\v"
  2. \\v
  3. [root@shell]# echo \\\v
  4. \v
复制代码


这两个的区别在哪.我也看过shell的13问关于这部分的..无奈水平有限

论坛徽章:
3
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:19
20 [报告]
发表于 2007-12-14 16:08 |只看该作者
原帖由 ailms 于 2007-12-14 16:04 发表
有问题今晚再说了,我今天的本本都重启 N 遍了




实在是不好意思啊..哪天我发了..给你运一火车本本..
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP