免费注册 查看新帖 |

Chinaunix

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

[文本处理] sed替换特殊字符失败 [复制链接]

论坛徽章:
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
11 [报告]
发表于 2015-02-07 12:49 |只看该作者
s/contest/${ifconfig}/g
可以把分隔符换成别的字符,例如:
s@contest@${ifconfig}@g

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
12 [报告]
发表于 2015-02-07 12:58 |只看该作者
本帖最后由 聆雨淋夜 于 2015-02-07 13:52 编辑
  1. cat file
  2. eth0      Link encap:Ethernet  HWaddr FA:16:3E:28:18:D3  
  3.           inet addr:192.168.100.10  Bcast:192.168.100.255  Mask:255.255.255.0
  4.           inet6 addr: fe80::f816:3eff:fe28:18d3/64 Scope:Link
  5.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  6.           RX packets:17500133 errors:0 dropped:0 overruns:0 frame:0
  7.           TX packets:3292152 errors:0 dropped:0 overruns:0 carrier:0
  8.           collisions:0 txqueuelen:1000
  9.           RX bytes:1122804474 (1.0 GiB)  TX bytes:336386161 (320.8 MiB)

  10. lo        Link encap:Local Loopback  
  11.           inet addr:127.0.0.1  Mask:255.0.0.0
  12.           inet6 addr: ::1/128 Scope:Host
  13.           UP LOOPBACK RUNNING  MTU:16436  Metric:1
  14.           RX packets:115 errors:0 dropped:0 overruns:0 frame:0
  15.           TX packets:115 errors:0 dropped:0 overruns:0 carrier:0
  16.           collisions:0 txqueuelen:0
  17.           RX bytes:10058 (9.8 KiB)  TX bytes:10058 (9.8 KiB)

  18. cat file1
  19. contest
  20. abc

  21. sed -i 's/contest/cat file/e' file1
复制代码

论坛徽章:
0
13 [报告]
发表于 2015-02-07 13:28 |只看该作者
本帖最后由 t12345pk 于 2015-02-07 13:35 编辑

回复 10# Shell_HAT


Shell_HAT 替换成@ 还是未能解决掉

root@resManagerSrv:~$ ifconfig
eth0      Link encap:以太网  硬件地址 00:50:56:a2:3c:d3  
          inet 地址:10.111.111.111  广播:10.111.111.255  掩码:255.255.255.0
          inet6 地址: fe80::250:56ff:fea2:3cd3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  跃点数:1
          接收数据包:22627553905 错误:0 丢弃:266411 过载:0 帧数:0
          发送数据包:21453317839 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:1000
          接收字节:5570685128407 (5.5 TB)  发送字节:9138596878341 (9.1 TB)

lo        Link encap:本地环回  
          inet 地址:127.0.0.1  掩码:255.0.0.0
          inet6 地址: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  跃点数:1
          接收数据包:44 错误:0 丢弃:0 过载:0 帧数:0
          发送数据包:44 错误:0 丢弃:0 过载:0 载波:0
          碰撞:0 发送队列长度:0
          接收字节:2852 (2.8 KB)  发送字节:2852 (2.8 KB)

报错如下
root@resManagerSrv:~$ sh test.sh
sed: -e expression #1, char 67: unterminated `s' command

论坛徽章:
0
14 [报告]
发表于 2015-02-07 13:40 |只看该作者
回复 12# 聆雨淋夜

运行完以后
root@resManagerSrv:~$ cat file1
context
abc

file1中的值还是未能改变,需要file1的值是
eth0 Link encap:Ethernet HWaddr 00:50:56:8b:08:3f inet addr:192.168.0.32 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::250:56ff:fe8b:83f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:24848800 errors:0 dropped:119 overruns:0 frame:0 TX packets:26947346 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:3488266345 (3.4 GB) TX bytes:20928335941 (20.9 GB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:1571935 errors:0 dropped:0 overruns:0 frame:0 TX packets:1571935 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:197248872 (197.2 MB) TX bytes:197248872 (197.2 MB)
abc

实际项目需要 file1中还包含有很多其它重要数据,
必须只能在file1基础上修改

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
15 [报告]
发表于 2015-02-07 13:51 |只看该作者
本帖最后由 聆雨淋夜 于 2015-02-07 13:52 编辑

回复 14# t12345pk
忘记加-i参数了

   

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
16 [报告]
发表于 2015-02-07 14:54 |只看该作者
回复 12# 聆雨淋夜


    如果有是 foo context 这种情形就不行了。

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
17 [报告]
发表于 2015-02-07 14:57 |只看该作者
楼主问题的关键在$ifconfig上

#!/bin/bash
ifconfig = `ifconfig`  
ifconfig=$(echo $ifconfig)            #多方查证,此步骤应该是转换ifconfig变量类型为字符串
sed -i "s/contest/${ifconfig}/g" test.xml

如此,方可替换成功


但是bash通常是不用指定变量类型的,shell能根据变量值自动判断变量类型,此处$ifconfig从字面上观察已是字符型了,我也不知为何还要转一次
此外不知有什么办法能查看一个自定义的变量是什么类型呢 t12345pkShell_HAT

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
18 [报告]
发表于 2015-02-07 15:02 |只看该作者
回复 14# t12345pk


    你是想把 ifconfig 输出中换行符去掉,再替换到 context 处吧?

论坛徽章:
9
射手座
日期:2014-07-29 13:05:07双子座
日期:2015-01-11 17:01:522015年亚洲杯之朝鲜
日期:2015-02-01 16:14:282015亚冠之阿尔艾因
日期:2015-06-04 17:54:40数据库技术版块每日发帖之星
日期:2015-08-02 06:20:00数据库技术版块每日发帖之星
日期:2015-10-28 06:20:00数据库技术版块每日发帖之星
日期:2015-11-26 06:20:0015-16赛季CBA联赛之天津
日期:2016-06-20 17:09:2015-16赛季CBA联赛之青岛
日期:2017-02-26 15:54:19
19 [报告]
发表于 2015-02-07 15:02 |只看该作者
补充一点,$ifconfig变量中已经有'/'字符
sed替换应该参照Shell_HAT所说使用sed 's@contest@$ifconfig@g' file

论坛徽章:
22
处女座
日期:2014-10-11 13:33:292015亚冠之塔什干火车头
日期:2015-07-20 19:59:042015亚冠之塔什干火车头
日期:2015-07-26 10:59:31程序设计版块每日发帖之星
日期:2015-08-05 06:20:00每日论坛发贴之星
日期:2015-08-05 06:20:00程序设计版块每日发帖之星
日期:2015-08-07 06:20:00每日论坛发贴之星
日期:2015-08-07 06:20:002015亚冠之阿尔纳斯尔
日期:2015-10-01 15:23:28白银圣斗士
日期:2015-12-07 17:17:06操作系统版块每日发帖之星
日期:2015-12-27 06:20:002015亚冠之广州富力
日期:2015-07-08 15:48:31程序设计版块每日发帖之星
日期:2015-06-11 22:20:00
20 [报告]
发表于 2015-02-07 15:09 |只看该作者
回复 16# blackold
请教黑哥,这里sed不是把整行(foo  contest)替换为cat file  么

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP