免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请教个sed删除的问题,如何区分匹配到并且删除成功了,还是没有匹配到? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-25 15:43 |只看该作者 |倒序浏览
例如一个文件包含一行test

sed -i '/test/d' file

怎么知道是删除成功了,还是根本没有匹配到,我查看了返回值都是0。
目的是想知道文件是否有改动。

谢谢!

论坛徽章:
50
15-16赛季CBA联赛之广夏
日期:2018-11-05 09:42:462015年亚冠纪念徽章
日期:2015-07-23 11:58:122015亚冠之广州富力
日期:2015-07-07 08:26:172015亚冠之塔什干棉农
日期:2015-06-29 09:08:072015年亚洲杯之伊朗
日期:2015-03-08 20:51:012015年迎新春徽章
日期:2015-03-04 09:58:11未羊
日期:2014-10-16 22:41:47处女座
日期:2014-10-16 15:33:33酉鸡
日期:2014-03-13 12:54:10巳蛇
日期:2014-03-10 14:39:052015亚冠之德黑兰石油
日期:2015-07-29 12:46:372015亚冠之德黑兰石油
日期:2015-08-07 12:54:11
2 [报告]
发表于 2013-06-25 15:58 |只看该作者
可以用grep来判断一下。
  1. [WilliBhamlll@CC ~]$ cat file   
  2. aaa
  3. test
  4. aaa
  5. aaa
  6. [WilliBhamlll@CC ~]$ ./test.sh  
  7. yes
  8. no
  9. [WilliBhamlll@CC ~]$ cat test.sh
  10. #!/bin/bash
  11. test(){
  12. if grep -q 'test' file;then
  13.         echo "yes"
  14. else echo "no"
  15. fi
  16. }
  17. test
  18. sed -i '/test/d' file
  19. test
复制代码

论坛徽章:
0
3 [报告]
发表于 2013-06-25 16:20 |只看该作者
如果是不知道可能匹配的内容呢,例如删除#begin 和 #end之间的内容,不知道中间具体是什么?
怎么知道是不是改动文件了?

论坛徽章:
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
4 [报告]
发表于 2013-06-25 16:29 |只看该作者
本帖最后由 yestreenstars 于 2013-06-25 17:26 编辑

1.通过返回值来判断文件是否被修改是肯定不行的,因为无论是否存在test,sed都是成功执行的~
2.可以尝试通过MD5验证的方法(具体方法自己搜索一下吧)~
3.提供一种思路:先将源文件复制一份,然后运行你的sed命令,再通过diff命令比较修改后的文件和拷贝的文件~

论坛徽章:
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
5 [报告]
发表于 2013-06-25 16:49 |只看该作者
文本内容不多的话,把-i去掉,使用sed '/test/d' file可以从打印信息中看到有没有替换,有替换再加-i编辑

论坛徽章:
0
6 [报告]
发表于 2013-06-25 17:06 |只看该作者
@thomasnew

保存一份原文件,使用diff命令对比一下原文件和更新后的文件差异

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2013-06-25 17:41 |只看该作者
用 sed 的 s 命令来把需要删除的内容替换为空。这样,在 sed 里可以用 t 或 T 来判断是否替换成功。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
8 [报告]
发表于 2013-06-25 17:42 |只看该作者
另外甚至可以用 e 命令执行 echo 来输出结果

论坛徽章:
0
9 [报告]
发表于 2013-06-25 17:43 |只看该作者
回复 7# seesea2517

能否给个示例,t或者T怎么用的,谢谢!

   

论坛徽章:
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
10 [报告]
发表于 2013-06-25 17:44 |只看该作者
回复 9# thomasnew


    你直接无视我们前面的回答了是吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP