免费注册 查看新帖 |

Chinaunix

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

[文本处理] 如何用一个字符替换文件里所有相同的另一个字符,各位大侠帮帮忙,在线等 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-02 20:29 |只看该作者 |倒序浏览
文件a
#
cat a
left=1.1.1.1
22222222222
right=2.2.2.2
222222222222222
left=1.1.1.1
right=3.3.3.3
33333333333333
#
变量b=11.11.11.11
要求:用变量b的值将文件a里left=后的1.1.1.1换成变量b的值
我将1.1.1.1赋给了c
c=1.1.1.1
结果变成
cat a
left=11.11.11.11
22222222222
right=2.2.2.2
222222222222222
left=11.11.11.11
right=3.3.3.3
33333333333333
由于系统问题不能使用sed  's/'$c'/’$b'/' 这种办法中的'$c' ,'$b'代表1.1.1.1 和11.11.11.11
各位大侠有没有其他办法来用变量代替1.1.1.1和11.11.11.11
不用sed也行只要能实现

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
2 [报告]
发表于 2014-12-02 20:35 |只看该作者
你要的是这种效果吗???
a=1.1.1.1
b=11.11.11.11
sed "s/$a/$b/g" 4444
left=11.11.11.11
22222222222
right=2.2.2.2
222222222222222
left=11.11.11.11
right=3.3.3.3
33333333333333

论坛徽章:
0
3 [报告]
发表于 2014-12-02 20:41 |只看该作者
回复 2# super皮波


    是的,我试试你这个方法,看看我的移植过来的系统支不支持

论坛徽章:
46
2015小元宵徽章
日期:2015-03-06 15:58:18羊年新春福章
日期:2015-04-14 10:37:422015年亚洲杯之阿曼
日期:2015-04-14 10:41:50NBA常规赛纪念章
日期:2015-05-04 22:32:03NBA季后赛大富翁
日期:2015-05-04 22:34:11菠菜明灯
日期:2015-05-04 22:35:49新奥尔良黄蜂
日期:2015-05-04 22:49:2315-16赛季CBA联赛之广夏
日期:2015-12-11 15:02:342015年亚洲杯之巴勒斯坦
日期:2015-03-04 19:56:562015年亚洲杯之阿联酋
日期:2015-03-04 11:19:04休斯顿火箭
日期:2015-03-02 16:32:11纽约尼克斯
日期:2015-03-02 16:09:04
4 [报告]
发表于 2014-12-02 20:42 |只看该作者
回复 3# hazhuyg
sed用变量的时候别用单引号,单引号不识别$
用双引号

sed ""


   

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
5 [报告]
发表于 2014-12-02 20:45 |只看该作者
回复 1# hazhuyg
  1. c=1.1.1.1
  2. b=11.11.11.11
  3. awk -vc=$c -vb=$b '{gsub(c,b)}1' a
  4. left=11.11.11.11
  5. 22222222222
  6. right=2.2.2.2
  7. 222222222222222
  8. left=11.11.11.11
  9. right=3.3.3.3
  10. 33333333333333
复制代码

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
6 [报告]
发表于 2014-12-02 20:47 |只看该作者
应该在判断一下
  1. awk -vc=$c -vb=$b '/left/{gsub(c,b)}1' a
复制代码

论坛徽章:
0
7 [报告]
发表于 2014-12-02 20:57 |只看该作者
回复 4# super皮波


    谢谢,试了移植过来的系统还是不支持这种用法

论坛徽章:
0
8 [报告]
发表于 2014-12-02 21:03 |只看该作者
回复 6# Buring__


    试了一下可以了,能详细解释一下吗,大侠,谢谢

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
9 [报告]
发表于 2014-12-02 21:21 |只看该作者
hazhuyg
-vb=$b 把系统变量的值指到awk里面
/left/ ==> $0 ~ /left/  正则匹配包含left的行
然后执行替换  gsub  是awk内部的函数  
  gsub(r, s [, t])  正则表达式r 在字符串t【省略t为$0】里面匹配 ,将匹配的值替换为s
man awk 有详细解释  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP