求助:自动产生字符数组(已解)

sh/bash/dash/ksh/zsh等Shell脚本
回复
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

求助:自动产生字符数组(已解)

#1

帖子 halfwolf » 2012-02-24 20:17

问题1:
用seq命令可以产生数字序列,譬如,seq 1 10;则可得到1~10的数字序列;
故,是否存在类似的命令,可以产生从a~z的字符序列;

问题2:
该问题可能比较菜,通过
grep -e 'a\{2\}' urfile
可以得到urfile中,存在两个连续 a的字符串;
故,是否存在一种通配模式,将两个以上连续相同字母的字符串全给匹配出来?
上次由 halfwolf 在 2012-03-15 14:44,总共编辑 1 次。
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助:自动产生字符数组

#2

帖子 lilydjwg » 2012-02-24 20:42

代码: 全选

ghc -e 'import List' -e "putStrLn $ intersperse ' ' ['a'..'z']"

代码: 全选

ruby -e 'puts ("a".."z").to_a.join(" ")'

代码: 全选

python -c "print(' '.join([chr(x) for x in range(ord('a'), ord('z')+1)]))"
ubuntu_vivi
帖子: 34
注册时间: 2007-08-10 22:30

Re: 求助:自动产生字符数组

#3

帖子 ubuntu_vivi » 2012-02-28 23:58

1. 可以用大括号展开

代码: 全选

echo {a..z}
echo {A..Z}
echo {b..h}
echo {1..9}
2. 没见过这样的模式。。。我觉得可以穷举一下

代码: 全选

for reg in {a..z}; do
    grep -i --color=auto -E "$reg{2,}" input.txt
done
头像
lilydjwg
论坛版主
帖子: 4258
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: 求助:自动产生字符数组

#4

帖子 lilydjwg » 2012-02-29 0:17

ubuntu_vivi 写了:1. 可以用大括号展开

代码: 全选

echo {a..z}
echo {A..Z}
echo {b..h}
echo {1..9}
原来 zsh 需要 setopt BRACE_CCL http://stackoverflow.com/questions/2394 ... -lists-how
头像
Think1st
帖子: 45
注册时间: 2012-02-07 23:08

Re: 求助:自动产生字符数组

#5

帖子 Think1st » 2012-02-29 10:29

ubuntu_vivi 写了:1. 可以用大括号展开

代码: 全选

echo {a..z}
echo {A..Z}
echo {b..h}
echo {1..9}
:em11
在这里,问题比答案更抢手。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助:自动产生字符数组

#6

帖子 fnan » 2012-02-29 20:11

grep -Eo '([a-zA-Z])\1+'
# 正则基础而已。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 求助:自动产生字符数组

#7

帖子 halfwolf » 2012-03-15 14:39

谢谢诸位!
最近忙,很长时间没上论坛了,呵呵!

ubuntu_vivi乃神人也,谢谢你的{a..z}和grep -i --color=auto -E ,I super like it!

谢谢fnan ,又学了不少正则表达式方面的知识,顺便卖弄一下,呵呵

Example.1
-----------------------------------------------------------------
grep -E '(a)\1' input.txt
等价于
grep '\(a\)\1' input.txt
-E 正则表达
(a) 匹配 a,且该匹配被保存为标签1,即\1;
既有(a),又有\1,就是匹配两次咯

Example.2
-----------------------------------------------------------------
grep -E '(a)\1+' input.txt
+匹配一个或多个加号前的字符(注:非字符串).
故,该表达式匹配两次以上的a咯

Example.3
-----------------------------------------------------------------
grep -oE '(a)\1+' input.txt
-o only,只输出匹配内容,非将正行输出
故,输出一大堆a咯

Example.4
-----------------------------------------------------------------
grep -E '([a-zA-Z])\1+' input.txt
[] 匹配[]中的任一个
[a-zA-Z] 匹配a-z或A-Z中的任一个
故,输出包含两个以上连续相同字母的行

Example.5
-----------------------------------------------------------------
grep -i --color=auto -E '([a-z])\1' input.txt
-i 比较时忽略大小写
--color=auto 给匹配项填加颜色
回复