免费注册 查看新帖 |

Chinaunix

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

文本替换的问题 [复制链接]

论坛徽章:
0
发表于 2008-07-02 16:13 |显示全部楼层
3可用积分
有两个文件,一个是替换字符的字典文件X,如下所示:
惣擔
?椷
鸖嬌
?嶈
噴姅
鷆丠
嘦俀
鹔偒
鷽丠
?婌
?孠
塩嬈
一个文件是需要替换的文件Y。内容如下:
惣擔杮-2G    C    OPS塩嬈晹    AD    惣擔杮。。。。。。
需要编写个shell将X文件的每行第一个字符在Y文件中所有出现的地方替换成X文件的第二个字符。谢谢!!!

最佳答案

查看完整内容

看了你的shell,首先取第几个字符不用cut,如果你是bash,可以使用下列方式a='abcd"echo ${a:0:2} ==> abecho $(a:2:2} ==> cd第二,你每取一行就调用sed 修改Y文件,这样会多次扫描Y文件(扫描次数为X行数),效率太低,建议取得第一\第二字符后使用echo "s/${T1}/${T2}/g" >> tempfile的方式,将所有的修改命令保存成临时文件,循环结束后,通过sed -f tempfile Y > Y.new的方式一次性修改Y文件

论坛徽章:
0
发表于 2008-07-02 16:13 |显示全部楼层
原帖由 zgl90k 于 2008-7-2 16:43 发表
X文件中的第一个字符都不是空的,可能是显示的原因,我们看到的都是乱码。
还有我写的shell,sed 's/$T1/$T2/g' Y.txt > temp.txt 没有发挥作用,是怎么回事啊?
一个替换都没做。

看了你的shell,首先取第几个字符不用cut,如果你是bash,可以使用下列方式
a='abcd"
echo ${a:0:2}   ==> ab
echo $(a:2:2}   ==> cd

第二,你每取一行就调用sed 修改Y文件,这样会多次扫描Y文件(扫描次数为X行数),效率太低,建议取得第一\第二字符后使用
echo "s/${T1}/${T2}/g" >> tempfile的方式,将所有的修改命令保存成临时文件,循环结束后,通过sed -f tempfile Y > Y.new的方式一次性修改Y文件

论坛徽章:
0
发表于 2008-07-02 16:19 |显示全部楼层
乱码,看不清楚内容.如果你的替换没有重复的话,最简单的办法就是把x文件每一行改成如下格式
s/字符1/字符2/g,然后保存成chang.sed,用sed命令调用来修改Y文件
sed -f chang.sed Y > Y.new

论坛徽章:
0
发表于 2008-07-02 16:21 |显示全部楼层
X文件是不能更改的。

论坛徽章:
30
ChinaUnix元老
日期:2015-02-02 08:55:39CU十四周年纪念徽章
日期:2019-08-20 08:30:3719周年集字徽章-19
日期:2019-08-27 13:31:2619周年集字徽章-CU
日期:2019-09-08 23:26:25
发表于 2008-07-02 16:29 |显示全部楼层
“将X文件的每行第一个字符在Y文件中所有出现的地方替换成X文件的第二个字符”?X文件的第二行不是只有一个字吗,怎么替换?

论坛徽章:
0
发表于 2008-07-02 16:29 |显示全部楼层
下面是我自己写的shell
#!/bin/sh
while read TEMP
do
      T1=$(echo $TEMP | cut -c 1 )
      T2=$(echo $TEMP | cut -c 2)
      sed 's/$T1/$T2/g' Y.txt > temp.txt
      mv temp.txt MIPB2010.txt
done < X.txt

可是sed 's/$T1/$T2/g' Y.txt > temp.txt 没有发挥作用,是怎么回事啊?

论坛徽章:
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
发表于 2008-07-02 16:30 |显示全部楼层

回复 #1 zgl90k 的帖子

try:

  1. sed -f <(sed 's/^\(..\)\(..\).*/s\/\1\/\2\/g/' X) Y
复制代码


原文件:
$ head X Y
==> X <==
惣擔
?椷
鸖嬌
?嶈
噴姅
鷆丠
嘦俀
鹔偒
鷽丠
?婌

==> Y <==
惣擔杮-2G    C    OPS塩嬈晹    AD    惣擔杮。。。。。。

结果:
$ sed -f <(sed 's/^\(..\)\(..\).*/s\/\1\/\2\/g/' X) Y
擔擔杮-2G    C    OPS嬈嬈晹    AD    擔擔杮。。。。。。

[ 本帖最后由 blackold 于 2008-7-2 16:43 编辑 ]

论坛徽章:
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
发表于 2008-07-02 16:32 |显示全部楼层

回复 #5 zgl90k 的帖子

应该将MIPB2010.tx 改为Y.txt
另外你没有cut对。

[ 本帖最后由 blackold 于 2008-7-2 16:34 编辑 ]

论坛徽章:
0
发表于 2008-07-02 16:34 |显示全部楼层
X中
?婌
?孠
前面都是空的,转成那个?

论坛徽章:
0
发表于 2008-07-02 16:40 |显示全部楼层
原帖由 zgl90k 于 2008-7-2 16:21 发表
X文件是不能更改的。

看贴不看全,都叫你保存成change.sed了,你还不能更改
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP