免费注册 查看新帖 |

Chinaunix

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

[文本处理] 【求助】sed如何指定单引号中的内容 [复制链接]

论坛徽章:
0
发表于 2013-12-10 00:05 |显示全部楼层
本帖最后由 trubee 于 2013-12-10 00:21 编辑

题目表达可能不是太到位。
比如我有一个文本文件test.txt,内容为:
  1. 121        insert into user values('张三','112323198111112932','18611382732','4428991233299999')
  2. 130        insert into user values('李四','22900220100228291X','13901028374','5187111192828888')
  3. 140        insert into user values('王五','30100219491231829X','15810192837','6222020211102937776')
复制代码
最终替换成

121        insert into user values('张三','******************','18611382732','****************')
130        insert into user values('李四','******************','13901028374','****************')
140        insert into user values('王五','******************','15810192837','****************')

分别把身份证号与银行账号的列用*替换掉。想了好久没想出可行的方法

论坛徽章:
8
双子座
日期:2013-08-31 07:37:12金牛座
日期:2013-09-09 18:49:12处女座
日期:2013-09-23 11:43:14处女座
日期:2013-10-09 19:48:21狮子座
日期:2014-03-24 18:22:12丑牛
日期:2014-04-22 22:07:51申猴
日期:2014-06-12 21:54:13双鱼座
日期:2014-06-13 21:52:31
发表于 2013-12-10 04:15 |显示全部楼层
本帖最后由 kernel69 于 2013-12-12 11:23 编辑

来个perl吧
  1. $ cat p.pl
  2. #!/usr/bin/env perl
  3. while(<DATA>) {
  4.     @F = split/'/;
  5.     print join "'", @F[0..2],"X" x length $F[3],@F[4..6],"X" x length $F[7],$F[8];


  6. }


  7. __DATA__
  8. 121        insert into user values('张三','112323198111112932','18611382732','4428991233299999')
  9. 130        insert into user values('李四','22900220100228291X','13901028374','5187111192828888')
  10. 140        insert into user values('王五','30100219491231829X','15810192837','6222020211102937776')
  11. $ ./p.pl
  12. 121        insert into user values('张三','XXXXXXXXXXXXXXXXXX','18611382732','XXXXXXXXXXXXXXXX')
  13. 130        insert into user values('李四','XXXXXXXXXXXXXXXXXX','13901028374','XXXXXXXXXXXXXXXX')
  14. 140        insert into user values('王五','XXXXXXXXXXXXXXXXXX','15810192837','XXXXXXXXXXXXXXXXXXX')
  15. $
复制代码
搞个命令行的perl,就因为是单引号'是分割符,怎么也出不来效果,还是对shell解析不太了解
@yestreenstars 怎么修改成命令行的?
  1. pi@raspberrypi ~/perl $ cat data
  2. 121        insert into user values('张三','112323198111112932','18611382732','4428991233299999')
  3. 130        insert into user values('李四','22900220100228291X','13901028374','5187111192828888')
  4. 140        insert into user values('王五','30100219491231829X','15810192837','6222020211102937776')
  5. pi@raspberrypi ~/perl $ perl -F/\'/ -lane 'print join "\047", @F[0..2],"*" x length $F[3],@F[4..6],"*" x length $F[7],$F[8]' data
  6. 121        insert into user values('张三','******************','18611382732','****************')
  7. 130        insert into user values('李四','******************','13901028374','****************')
  8. 140        insert into user values('王五','******************','15810192837','*******************')
  9. pi@raspberrypi ~/perl $
复制代码
回复 1# trubee


   

论坛徽章:
4
技术图书徽章
日期:2013-09-23 10:22:37狮子座
日期:2013-10-15 23:31:54卯兔
日期:2013-11-11 17:33:15金牛座
日期:2013-11-15 17:25:28
发表于 2013-12-10 07:45 来自手机 |显示全部楼层
目测可以用awk
在手机上写的,可能不准确
awk -F, '{$2=\'*****\';$4=\'*****\'}'

论坛徽章:
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
发表于 2013-12-10 07:58 |显示全部楼层
回复 3# nbrr


    目测 \' 这样不行

论坛徽章:
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-12-10 09:12 |显示全部楼层
按LZ给的结果来的:
  1. awk -F, -vOFS=',' '{$2="\047******************\047";$4="\047****************\047)"}1'
复制代码
根据数字的实际位数替换:
  1. awk -F, -vOFS=',' 'gsub(/[^\047]/,"*",$2) && gsub(/[^\047)]/,"*",$4)'
复制代码

论坛徽章:
8
技术图书徽章
日期:2013-08-22 11:21:28未羊
日期:2015-01-19 22:22:25巳蛇
日期:2014-08-11 16:53:08子鼠
日期:2014-05-29 09:04:44摩羯座
日期:2014-04-11 14:15:07丑牛
日期:2014-01-24 12:41:28金牛座
日期:2013-11-21 17:38:28射手座
日期:2015-01-21 08:50:32
发表于 2013-12-10 09:18 |显示全部楼层
一定要sed吗?
what about:
  1. [huang@~]$ cat test
  2. 121        insert into user values('..','112323198111112932','18611382732','4428991233299999')
  3. 130        insert into user values('..','22900220100228291X','13901028374','5187111192828888')
  4. 140        insert into user values('..','30100219491231829X','15810192837','6222020211102937776')
  5. [huang@~]$ awk -F',' '{gsub(/[0-9A-Z]/,"*",$2);gsub(/[0-9A-Z]/,"*",$4)}1' test
  6. 121        insert into user values('..' '******************' '18611382732' '****************')
  7. 130        insert into user values('..' '******************' '13901028374' '****************')
  8. 140        insert into user values('..' '******************' '15810192837' '*******************')
复制代码

论坛徽章:
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-12-10 09:20 |显示全部楼层
回复 2# kernel69
根据我写的awk命令改的:
  1. perl -F, -lane '$F[1]=~s/[^\047]/*/g;$F[3]=~s/[^\047)]/*/g;print join ",",@F'
复制代码

论坛徽章:
1
数据库技术版块每日发帖之星
日期:2016-02-25 06:20:00
发表于 2013-12-10 09:23 |显示全部楼层
  1. sed -i 's/[0-9]\{17\}[0-9xX]/******************/;s/[0-9]\{16,\}/****************/'
复制代码

论坛徽章:
2
巨蟹座
日期:2013-12-07 16:51:13天秤座
日期:2013-12-11 15:12:14
发表于 2013-12-10 09:39 |显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
13
双鱼座
日期:2013-10-23 09:30:05数据库技术版块每日发帖之星
日期:2016-04-20 06:20:00程序设计版块每日发帖之星
日期:2016-03-09 06:20:002015亚冠之塔什干火车头
日期:2015-11-02 10:07:452015亚冠之德黑兰石油
日期:2015-08-30 10:07:07数据库技术版块每日发帖之星
日期:2015-08-28 06:20:00数据库技术版块每日发帖之星
日期:2015-08-05 06:20:002015年迎新春徽章
日期:2015-03-04 09:57:09辰龙
日期:2014-12-03 14:45:52酉鸡
日期:2014-07-23 09:46:23亥猪
日期:2014-03-13 08:46:22金牛座
日期:2014-02-11 09:36:21
发表于 2013-12-10 09:46 |显示全部楼层
awk -F, '{gsub(/[0-9]/,"*",$2);gsub(/[0-9]/,"*",$4);}1'  urfile

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP