免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 1720 | 回复: 14

[文本处理] 请教关于sed的两个问题 [复制链接]

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00数据库技术版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-11-29 22:00 |显示全部楼层
大神们,我在看mysqld_safe启动脚本中发现两个sed的表达式,看不懂复杂的sed,请大家帮忙。
(1)sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g'
(2)sed -e 's;^--[^=]*=;;'

请大家帮忙回答,另外,有对mysqld_safe脚本有研究的吗?还要请教其他问题,谢谢了!

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00数据库技术版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-11-29 22:08 |显示全部楼层
顶!期待大家的回答。

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00数据库技术版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-11-30 09:45 |显示全部楼层
请大家帮忙

论坛徽章:
0
发表于 2016-11-30 10:11 |显示全部楼层
(1)sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g'
1.这个问题应该是”,“作为分隔符
2.\1是后向引用
3.s和g就是全局替换的意思
总体应该是把前面括号里的内容加上\\的意思

论坛徽章:
0
发表于 2016-11-30 10:13 |显示全部楼层
(2)sed -e 's;^--[^=]*=;;'
这个也没多大区别;作为分隔符,替换
总体作用是把^--[^=]*=删除

论坛徽章:
2
操作系统版块每日发帖之星
日期:2016-06-20 06:20:00数据库技术版块每日发帖之星
日期:2016-06-20 06:20:00
发表于 2016-11-30 10:17 |显示全部楼层
回复 4# 加油AlwaysWin

感谢你的解答,谢谢了

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
发表于 2016-11-30 10:21 |显示全部楼层

  1. (1)
  2. 在所有 非[a-zA-Z0-9/_.=-]字符前添加\字符 <=> sed 's/[^a-zA-Z0-9/_.=-]/\\&/g'
  3. (2)
  4. 删除从行首"--"到第一个"="的内容
复制代码

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
发表于 2016-11-30 10:21 |显示全部楼层
回复 1# jicongyuan

我没有看代码,但就这个,本质是得到数据,
第二个是得到 --key=value中的value
第一个是就是表示这个值是被quote的,举一个例子,echo "\"hello world\"" 如果正常输出是 "hello world"
如果调用这个 echo "\"hello world\"" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g' 输出是 \"hello world\" 这样,就会对这个字符进行转义

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
发表于 2016-11-30 10:22 |显示全部楼层
回复 1# jicongyuan

我没有看代码,但就这个,本质是得到数据,第二个是得到 --key=value中的value第一个是就是表示这个值是被quote的,举一个例子,echo "\"hello world\"" 如果正常输出是 "hello world"如果调用这个 echo "\"hello world\"" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g' 输出是 \"hello world\" 这样,就会对这个字符进行转义

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
发表于 2016-11-30 10:23 |显示全部楼层
回复 1# jicongyuan

我没有看代码,但就这个,本质是得到数据,第二个是得到 --key=value中的value
第一个是就是表示这个值是被quote的,举一个例子,
  1. echo "\"hello world\""
复制代码

如果正常输出是
  1. "hello world"
复制代码

如果调用这个
  1. echo "\"hello world\"" | sed -e 's,\([^a-zA-Z0-9/_.=-]\),\\\1,g'
复制代码

输出是
  1. \"hello world\"
复制代码

这样,就会对这个字符进行转义
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP