免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: bkj
打印 上一主题 下一主题

这种情况下的字符过滤如何处理呢? [复制链接]

论坛徽章:
7
荣誉版主
日期:2011-11-23 16:44:17子鼠
日期:2014-07-24 15:38:07狮子座
日期:2014-07-24 11:00:54巨蟹座
日期:2014-07-21 19:03:10双子座
日期:2014-05-22 12:00:09卯兔
日期:2014-05-08 19:43:17卯兔
日期:2014-08-22 13:39:09
11 [报告]
发表于 2007-12-24 20:39 |只看该作者
不知道理解了题意没有^_^
  1. sed -n '/[0-9]/d;h;y/ABCDEFGHIJKLMNOPQRST/abcdefghijklmnopqrst/;/\([a-t]\).*\1/d;s/[^a-t]//g;/^.\{5,10\}$/{g;p}'
复制代码

btw:
xyzabc
a b c d e f
a@b#c%d*e
这些如何处理?

论坛徽章:
0
12 [报告]
发表于 2007-12-24 21:28 |只看该作者

回复 #3 BLZer 的帖子

仅仅这种编码风格,不用看内容,看看缩进和适时的注释,就值得我们称赞了!

论坛徽章:
0
13 [报告]
发表于 2007-12-24 21:30 |只看该作者

  1. perl -e 'while(<>){
  2. next if /[0-9]/;
  3. $a=$_;
  4. chomp;
  5. $_=lc;
  6. next if /[u-z]/;
  7. s/[^a-t]//g;
  8. print $a if !/([a-t]).*\1/ && m/^.{5,10}$/}' <数据文件
复制代码


思路:
行中出现数字,就不符合要求
转换成小写后,如果出现[u-z]则不符合要求(如果行中还可能出现其他的不符合要求的字符,可以罗列在[u-z]中)
把除[a-t] 之外的字符删除,如果字符数在5~10,并且没有重复字符的话,就打印原始的数据。

论坛徽章:
0
14 [报告]
发表于 2007-12-24 21:57 |只看该作者
谢谢楼上的帮助
PS.用shell脚本好实现吗?

论坛徽章:
0
15 [报告]
发表于 2007-12-25 02:13 |只看该作者
原帖由 r2007 于 2007-12-24 20:39 发表
不知道理解了题意没有^_^
sed -n '/[0-9]/d;h;y/ABCDEFGHIJKLMNOPQRST/abcdefghijklmnopqrst/;/\([a-t]\).*\1/d;s/[^a-t]//g;/^.\{5,10\}$/{g;p}'
btw:
xyzabc
a b c d e f
a@b#c%d*e
这些如何处理?


这个挺强,按楼主的意思把 u-z 的过滤就好了

论坛徽章:
0
16 [报告]
发表于 2007-12-25 09:16 |只看该作者
原帖由 bkj 于 2007-12-24 21:57 发表
谢谢楼上的帮助
PS.用shell脚本好实现吗?


  1. #!/bin/bash
  2. while read line
  3. do
  4.         tmp=$(echo "$line" | tr 'A-Z' 'a-z')   # 转换小写
  5.         tmp="${tmp/[0-9u-z]}"  
  6.         [ ${#line} -ne ${#tmp} ] && continue  #判断是否有非法字符
  7.         tmp="${tmp//[^a-t]}"  #提取有效字符
  8.         [ ${#tmp} -lt 5 -o ${#tmp} -gt 10 ] && continue;  #判断是否是合法长度
  9.         echo "${tmp}" | grep -qE '(.).*\1'   #判断是否有重复字符
  10.         [ $? -ne 0 ] && echo "${line}"
  11. done  < 数据文件
复制代码

论坛徽章:
0
17 [报告]
发表于 2007-12-25 14:55 |只看该作者
楼主说大小写不敏感,没说大写转小写吧。

论坛徽章:
0
18 [报告]
发表于 2007-12-25 15:13 |只看该作者
原帖由 pheobee 于 2007-12-25 14:55 发表
楼主说大小写不敏感,没说大写转小写吧。



转换成小写比较好处理

不过,实际显示的仍然是原来的内容

论坛徽章:
0
19 [报告]
发表于 2007-12-25 15:27 |只看该作者
原帖由 springwind426 于 2007-12-25 15:13 发表



转换成小写比较好处理

不过,实际显示的仍然是原来的内容


呵呵。试了,果然好用。学习了。

论坛徽章:
0
20 [报告]
发表于 2007-12-25 16:49 |只看该作者
执行楼上的脚本时怎么会抱错呢?

root@# sh f.sh
f.sh: syntax error at line 4: `tmp=$' unexpected
root@# more f.sh
#!/bin/bash
while read line
do
        tmp=$(echo "$line" | tr 'A-Z' 'a-z')   # 转换小写
        tmp="${tmp/[0-9u-z]}"  
        [ ${#line} -ne ${#tmp} ] && continue  #判断是否有非法字符
        tmp="${tmp//[^a-t]}"  #提取有效字符
        [ ${#tmp} -lt 5 -o ${#tmp} -gt 10 ] && continue;  #判断是否是合法长度
        echo "${tmp}" | grep -qE '(.).*\1'   #判断是否有重复字符
        [ $? -ne 0 ] && echo "${line}"
done <test1.txt
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP