免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教下sed替换括号内的内容? [复制链接]

论坛徽章:
0
发表于 2014-07-23 18:54 |显示全部楼层
cmk3_loading_Xe.gnu
文件内容如下:

        set term pngcairo size 480,400 font 'arial,10'
          set xlabel "Loading (mmol/g)" font 'arial,12'
          set ylabel "Heat (KJ/mol)" font 'arial,12'
          set output "cmk3_loading_Kr.png"

          set border linewidth 1.0
          set key right bottom Left
          set key reverse
          set label 1 "(b)" at 2.5,3.2


          set key center at 23.0,0.75
          plot "cmk3-7A_Kr_298.0K_loading.txt" using (\$1/100000):2 w lp lc 10 lw 1 pt 13 ps 1.2 title "7A", \
               "cmk3-10A_Kr_298.0K_loading.txt" using (\$1/100000):2 w lp lc 11 lw 1 pt 9 ps 1.2 title "10A", \
               "cmk3-10A-8conn_Kr_298.0K_loading.txt" using (\$1/100000):2 w lp lc 3 lw 1 pt 11 ps 1.2 title "10A-8c", \
               "cmk3-14A_Kr_298.0K_loading.txt" using (\$1/100000):2 w lp lc 5 lw 1 pt 7 ps 1.2 title "14A", \
               "cmk3-14A-8conn_Kr_298.0K_loading.txt" using (\$1/100000):2 w lp lc 15 lw 1 pt 5 ps 1.2 title "14A-8c"


想把里面的          set label 1 "(b)" at 2.5,3.2 这一行中的(b)替换为(a),怎么以下shell代码无效呢??

sed -i -e '/label/\(b/\(a/' cmk3_loading_Xe.gnu


求指点,谢谢啦

论坛徽章:
768
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉鸡
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥猪
日期:2014-04-22 16:13:09狮子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53处女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
发表于 2014-07-23 18:57 |显示全部楼层
回复 1# tahaomei
说好的s命令呢。

   

论坛徽章:
0
发表于 2014-07-23 18:59 |显示全部楼层
啥意思?我用的label匹配这一行啊,应该不用了s了吧

老是提示


sed: -e expression #2, char 8: unknown command: `\'
sed: -e expression #2, char 8: unknown command: `\'


这个错误。为什么转义有问题?

论坛徽章:
0
发表于 2014-07-23 18:59 |显示全部楼层
是少了个s,谢谢。哈哈

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-07-23 19:01 |显示全部楼层
  1. sed -i '/label/s/(b/(a/'
复制代码

论坛徽章:
0
发表于 2014-07-23 19:02 |显示全部楼层
加了s,还是不行啊

改成 sed -i  -e '/label/s/\(b/\(a/'  cmk3_loading_Xe.gnu


错误如下:

sed: -e expression #2, char 17: Unmatched ( or \(
sed: -e expression #2, char 17: Unmatched ( or \(
sed: -e expression #2, char 17: Unmatched ( or \(

论坛徽章:
0
发表于 2014-07-23 19:03 |显示全部楼层
yestreenstars 发表于 2014-07-23 19:01



可以了,为什么不要用\对(转义呢?

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-07-23 19:08 |显示全部楼层
回复 7# tahaomei

因为小括号是元字符,只有元字符才需要转义~
   

论坛徽章:
0
发表于 2014-07-23 19:11 |显示全部楼层
回复 8# yestreenstars


啥意思?你说的前后矛盾啊,既然小括号是元字符,那需要转义啊,那你为什么代码里没有用\

   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-07-23 19:13 |显示全部楼层
回复 9# tahaomei

你明白元字符的作用是什么吗?小括号在正则表达式中是用来捕获组的,当你想用小括号来捕获组时就需要转义,不转义时它就是一个普通的小括号。
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP