免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2110 | 回复: 8

[文本处理] 请教大侠一个问题,文本替换的 [复制链接]

论坛徽章:
0
发表于 2013-04-12 14:58 |显示全部楼层
有100个文件,文件的内容有一个共同点,都包含test.txt中的内容
现在要把这100文件中,包含test.txt中的内容,都删除掉,如何操作?test.txt有多行
比如:
1.txt 的内容:
abcdefg
1234567
poiuylkj;

2.txt的内容:
oiuyt
1234567
poiuylkj;

test.txt的内容
1234567
poiuylkj;
这个100个文件中,
都包含了 test.txt 中的  1234567
                                  poiuylkj;

现在把这100文件中的    1234567
                                  poiuylkj;   都删除掉  怎么操作?

论坛徽章:
0
发表于 2013-04-12 15:33 |显示全部楼层
方法不算灵活,可以试试
  1. sed -i "/`tail -1 test.txt`\|`head -1 test.txt`/d" {1..100}.txt
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-04-12 19:28 |显示全部楼层
  1. grep -v -f test.txt $file > $file
复制代码

论坛徽章:
13
丑牛
日期:2013-08-16 15:08:22技术图书徽章
日期:2013-11-26 10:13:40双鱼座
日期:2013-11-08 15:03:26戌狗
日期:2013-11-08 13:52:30技术图书徽章
日期:2013-11-05 14:06:30戌狗
日期:2013-10-31 11:45:42CU十二周年纪念徽章
日期:2013-10-24 15:41:34天秤座
日期:2013-10-11 14:55:08子鼠
日期:2013-09-26 19:36:35水瓶座
日期:2013-09-26 17:44:56午马
日期:2013-08-26 10:24:23丑牛
日期:2013-08-19 14:43:22
发表于 2013-04-12 20:59 |显示全部楼层
本帖最后由 代号:军刀 于 2013-04-12 21:23 编辑

回复 3# L_kernel


      $file > $file,最后的$file的size=0
  1. read(3, "1234567\npoiuylkj;\n", 4096)   = 18
  2. read(3, "", 4096)                       = 0
  3. close(3)                                = 0
  4. munmap(0xb7f62000, 4096)                = 0
  5. open("/usr/lib/gconv/gconv-modules.cache", O_RDONLY) = 3
  6. fstat64(3, {st_mode=S_IFREG|0644, st_size=25462, ...}) = 0
  7. mmap2(NULL, 25462, PROT_READ, MAP_SHARED, 3, 0) = 0xb7f5c000
  8. close(3)                                = 0
  9. stat64("1.txt", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
复制代码

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2013-04-13 11:10 |显示全部楼层
代号:军刀 发表于 2013-04-12 20:59
回复 3# L_kernel
应该是要输出到一个新文件当中去的。$file_new

论坛徽章:
0
发表于 2013-04-14 07:10 |显示全部楼层
回复 3# L_kernel


    你这个应该不是LZ要求的。

因为LZ要求的是以test文件的整个内容为单位比较,删除。
你这个是以test文件中的行为单位。

比如test里有
  1. 1
  2. 2
  3. 3
  4. 4
复制代码
目标文件有
  1. foo
  2. 1
  3. bar
  4. 3
  5. blah
  6. 4
复制代码
那1,3,4也会被你的grep -v给弄掉,这恐怕不是LZ所要的。如果我理解错了另说。

还有一个就是,即使用grep -v -f,建议最好加上-F 和 -w 否则容易有误杀发生呢,是吧?

关于lz的问题,我昨天恰巧在SO 回答了一个类似(几乎相同的),你可以参考,就不在这再贴1次了。主要想法就是先把你的test逐行合并成单行,用不可见符号分割,然后每处理一个文件也做这个转换,这样就可以删除你test.txt文件内容。然后再把不可见符号变成换行。但这个对于你的这个需求,性能如何,得你自己测试了。具体操作看这个链接:

http://stackoverflow.com/questio ... t-from-another-file

另一个答案是由 叫Ed Morton 的给的。 这个家伙别看积分少, awk很牛。你也可以参考。


论坛徽章:
0
发表于 2013-04-14 08:09 |显示全部楼层
回复 6# sk1418


    恩,SK说的有道理。grep -v范围很广。LZ的要求很局限

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
发表于 2013-04-15 09:40 |显示全部楼层
回复 6# sk1418

学习。
谢谢了。
   

论坛徽章:
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
发表于 2013-04-15 09:59 |显示全部楼层
回复 6# sk1418


    好网站,赞一个~ 又多了一个去处~ 想得很周到~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP