次のパスワードのリストがあります。
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
与えられた正規表現に一致する各行で特定のアクションを実行するコマンドがあります。私はm
oveコマンドを使用して、「行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