特定の順序のすべての単語をリストの先頭に移動

特定の順序のすべての単語をリストの先頭に移動

次のパスワードのリストがあります。

aaaa00
aaaa01
aaaa02
...
zzzz97
zzzz98
zzzz99

このパターンを含むすべての単語をリスト(テキストファイル)の先頭に移動したいと思います。

コレクション-子音-コレクション-子音-ダブルX

どうすればいいですか?ありがとうございます。

答え1

使用ex:

vowel='[AaEeIiOoUu]'
cons='[BCDFGHJKLMNPQRSTVWXYZbcdfghjklmnpqrstvwxyz]'
printf '%s\n' "g/^$vowel$cons$vowel$cons[0-9][0-9]\$/m 0" x | ex file.txt

を使用する別の方法set icは次のとおりですset ignorecase

vow='[aeiou]'
cns="[$(printf %s {a..z} | tr -d "$vow")]"
printf '%s\n' 'set ignorecase' "g/^$vow$cns$vow$cns[0-9][0-9]\$/m 0" x | ex test.txt

これらの答えはPOSIX互換。各コマンドの中心には、g与えられた正規表現に一致する各行で特定のアクションを実行するコマンドがあります。私はmoveコマンドを使用して、「行0」の後に一致する行を配置しました。つまり、ファイルの先頭に移動しました。


ところで、あなたは何をしていますか?パスワードの種類を手動で編集しますか?

コードゴルフではどうですか?

printf %s\\n {a,e,i,o,u}{b..z}{a,e,i,o,u}{b..z}{00..99}|grep -ve^.{,..}\[eiou]

ここでは、78バイトのみを使用して、あなたが興味を持っているすべての組み合わせを作成しました! :血

答え2

コレクション - 非コレクション - コレクション - 非コレクションで始まるすべての行をファイルの先頭に移動します。

{ grep -i '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; grep -iv '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; } >outfile

「非母音」が十分でない場合は、[^aeiouy]子音リストに置き換えてください[bcdf...]

はい

次の入力ファイルを検討してください。

$ cat >input
asasxx
bsbsxx
esesxx
wswsxx

次のコマンドを実行してください。

$ { grep -i '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; grep -iv '[aeiouy][^aeiouy][aeiouy][^aeiouy]' input; } >outfile

出力ファイルは次のとおりです。

$ cat outfile
asasxx
esesxx
bsbsxx
wswsxx

関連情報