LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1133|回复: 19

linux7.3正则表达式的困惑

[复制链接]
发表于 2004-9-6 20:23:14 | 显示全部楼层 |阅读模式
ls -l | grep "\(\d\)\(\d\)\d\2\1"搜索全是数字的回文串文件名,有什么不对的地方么?在linux7.3下面不行。
发表于 2004-9-6 20:29:11 | 显示全部楼层
回文串文件名? :ask
 楼主| 发表于 2004-9-6 20:40:28 | 显示全部楼层

谢谢

恩,比如95859这样的东西,应该这样搜索么?谢谢您的回复。
发表于 2004-9-6 21:18:55 | 显示全部楼层
呵呵,好像是个难题
 楼主| 发表于 2004-9-6 21:42:27 | 显示全部楼层
谢谢您的关注!
发表于 2004-9-6 23:05:09 | 显示全部楼层
ls |grep -G [0-9]
发表于 2004-9-6 23:28:10 | 显示全部楼层
最初由 aaccdd 发表
ls |grep -G [0-9]

没那么简单吧,我的思路是这样的
/home/lee/test#ls
121      123456789012345678909876543210987654321  22322      2349   3334   5434  95859  abcdefedcba  defed
1234321  1234567890987654321                      234234235  30303  34043  5933  abcba  asdfk        f

/home/lee/test#cat f

  1. ls|while read i;do
  2.         echo $i|awk '/^[0-9]*$/{gsub(/./,"& ");print}'|\
  3.         awk 'NF%2!=0&&$1==$NF&&$2==$(NF-1)&&$3==$(NF-2)&&$4==$(NF-3)'
  4. done|tr -d ' '
复制代码

/home/lee/test#ksh f
1234321
123456789012345678909876543210987654321  #这样的文件名够长了吧
1234567890987654321
22322
30303
34043
95859

此脚本还有不足,感性趣的可以改进改进~
发表于 2004-9-6 23:38:05 | 显示全部楼层

  1. $ ls
  2. 12384  234     33290  95589   abc234  file  less  listnew  more  script  test
  3. 23     234abc  52349  a234bc  awk     find  list  ls       ping  sed

  4. $ ls |grep -G ^[0-9]*$
  5. 12384
  6. 23
  7. 234
  8. 33290
  9. 52349
  10. 95589
复制代码
发表于 2004-9-6 23:53:01 | 显示全部楼层
最初由 aaccdd 发表

  1. $ ls
  2. 12384  234     33290  95589   abc234  file  less  listnew  more  script  test
  3. 23     234abc  52349  a234bc  awk     find  list  ls       ping  sed

  4. $ ls |grep -G ^[0-9]*$
  5. 12384
  6. 23
  7. 234
  8. 33290
  9. 52349
  10. 95589
复制代码

人家楼主说的是回文 ,如:
1234321,95859 ...
要是取数字的直接
ls|grep ^[0-9]*$就可以的, ;)
发表于 2004-9-7 00:37:03 | 显示全部楼层
:p
  1. #!/bin/sh
  2. ls |grep ^[0-9]*$|while read i;do
  3. awk '
  4. {              str[NR]=($0);len[i]=length($0)
  5.                 for(i=1;i<=NR;i++){
  6.                         var[i]=1
  7.                         for(j=1;j<=len[i]/2;j++){
  8.                                 if ( substr(str[i],j,1) != substr(str[i],len[i]+
  9. 1-j,1)){ var[i]=0 };continue
  10.                         }
  11.                 }
  12. }
  13. END{      for(i=1;i<=NR;i++){if ( var[i] == 1 ){ print str[i] }}
  14. }'
  15. done
复制代码


如果查找包括字母,去掉grep ^[0-9]*$就行

  1. 01511510
  2. 0abba0
  3. 121abcba121
  4. 123456789012345678909876543210987654321
  5. 1a2b3c3b2a1
  6. 234432
  7. 75311357
  8. 83138
  9. abcba
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表