ソートせずにtxtファイル内のすべてのシーケンスをアルファベット順に探したいと思います。
例:テキストファイルが次のようになっているとします。
aedftg
wqof
abcdef
oufn
pqrs
aabcd
出力は
abcdef
pqrs
のように繰り返される文字もありませんaabcd
。
ベストアンサー1
オプションの1つ(英語でハードコードされています):
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
~に帰属忍者クマ猿頭の中から浮かぶアイデアを明確にしました。繰り返し文字(aabcc
)を受け入れるように正規表現を変更しました。
別のオプション:
sort
より良いアプローチは、アルファベットをハードコードする必要がないように、ロケール固有の照合チェックを使用することです。 〜のようにマイク・ジョーンズがやったは、その行の文字を別々の行に分割する必要があることを意味します。 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
違いが見つかるとsort
stderrに出力しますが、我々は戻りコードだけを気にするのでstderrを削除しました。
英語以外の入力デモ($
文字はシェルプロンプトです):
$ cat input
αβγα
αβγ
$ ./sorted2 < input
αβγ
$