查找按字母顺序排列的序列

-2 text-processing

我想在txt文件中找到按字母顺序排列的所有序列,而不进行排序。

示例:假设文本文件如下所示:

aedftg
wqof
abcdef
oufn
pqrs
aabcd
Run Code Online (Sandbox Code Playgroud)

输出应该是

abcdef
pqrs
Run Code Online (Sandbox Code Playgroud)

也没有像aabcd.

Jef*_*ler 5

一种选择,硬编码为英语:

grep -ix 'a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*y*z*' input
Run Code Online (Sandbox Code Playgroud)

感谢NinjaBearMonkey拼写出这是在我的头上发芽的想法; 我修改了正则表达式以允许重复字符 ( aabcc)。

另外一个选项:

使用sort检查特定于语言环境的排序规则是一种更好的方法,这样您就不必对字母表进行硬编码。正如mikejonesey 所做的那样,这意味着您必须将行的字符拆分为单独的行。我已经使用 shell 脚本(使用支持子字符串扩展的现代 shell)来避免调用 sed,并且还使用了sort-c 选项来指示输入是否已经排序:

while IFS= read -r line
do
  for((i=0; i < ${#line}; i++))
  do
    printf '%s\n' "${line:i:1}"
  done | sort -c 2>/dev/null && printf '%s\n' "$line"
done
Run Code Online (Sandbox Code Playgroud)

如果sort发现不符,则输出到stderr,但我们只关心返回码,所以我放弃stderr。

一个非英文输入的演示($字符是shell提示):

$ cat input
????
???
$ ./sorted2 < input
???
$
Run Code Online (Sandbox Code Playgroud)