2

背景: MS は、摩耗に重大な問題がある OEM に COA ラベルをリリースしました。使用したトナーが、COA ステッカーの紙に適切に接着されていませんでした。時間が経つにつれて、プロダクト キーは劣化し、特定の文字/数字が読み取れなくなり、再インストールのために認証されたキーを入力できなくなります。

問題: 文字/数字のいくつかだけが破損している場合、以前に試した数字を特定しようとするのは非常にイライラします。

リクエスト: sed または awk (できれば) または別の方法を使用して、次のような STRING を入力してください。

A{B,E,R,8}CDE-FGH{I,1}J-KLMN{O,Q,0}-PQRST-UVWXY

の出力を受け取ります

ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
AECDE-FGHIJ-KLMNO-PQRST-UVWXY
ARCDE-FGHIJ-KLMNO-PQRST-UVWXY
A8CDE-FGHIJ-KLMNO-PQRST-UVWXY
ABCDE-FGH1J-KLMNO-PQRST-UVWXY
AECDE-FGH1J-KLMNO-PQRST-UVWXY
ARCDE-FGH1J-KLMNO-PQRST-UVWXY
A8CDE-FGH1J-KLMNO-PQRST-UVWXY
ABCDE-FGHIJ-KLMNQ-PQRST-UVWXY
AECDE-FGHIJ-KLMNQ-PQRST-UVWXY
ARCDE-FGHIJ-KLMNQ-PQRST-UVWXY
A8CDE-FGHIJ-KLMNQ-PQRST-UVWXY
ABCDE-FGH1J-KLMNQ-PQRST-UVWXY
AECDE-FGH1J-KLMNQ-PQRST-UVWXY
ARCDE-FGH1J-KLMNQ-PQRST-UVWXY
A8CDE-FGH1J-KLMNQ-PQRST-UVWXY
ABCDE-FGHIJ-KLMN0-PQRST-UVWXY
AECDE-FGHIJ-KLMN0-PQRST-UVWXY
ARCDE-FGHIJ-KLMN0-PQRST-UVWXY
A8CDE-FGHIJ-KLMN0-PQRST-UVWXY
ABCDE-FGH1J-KLMN0-PQRST-UVWXY
AECDE-FGH1J-KLMN0-PQRST-UVWXY
ARCDE-FGH1J-KLMN0-PQRST-UVWXY
A8CDE-FGH1J-KLMN0-PQRST-UVWXY
4

2 に答える 2

5

コマンドラインでこれを試しましたか?少なくともbashでは、それは「うまくいく」:

> echo A{B,E,R,8}CDE-FGH{I,1}J-KLMN{O,Q,0}-PQRST-UVWXY
ABCDE-FGHIJ-KLMNO-PQRST-UVWXY ABCDE-FGHIJ-KLMNQ-PQRST-UVWXY ABCDE-FGHIJ-KLMN0-PQRST-UVWXY ABCDE-FGH1J-KLMNO-PQRST-UVWXY ABCDE-FGH1J-KLMNQ-PQRST-UVWXY ABCDE-FGH1J-KLMN0-PQRST-UVWXY AECDE-FGHIJ-KLMNO-PQRST-UVWXY AECDE-FGHIJ-KLMNQ-PQRST-UVWXY AECDE-FGHIJ-KLMN0-PQRST-UVWXY AECDE-FGH1J-KLMNO-PQRST-UVWXY AECDE-FGH1J-KLMNQ-PQRST-UVWXY AECDE-FGH1J-KLMN0-PQRST-UVWXY ARCDE-FGHIJ-KLMNO-PQRST-UVWXY ARCDE-FGHIJ-KLMNQ-PQRST-UVWXY ARCDE-FGHIJ-KLMN0-PQRST-UVWXY ARCDE-FGH1J-KLMNO-PQRST-UVWXY ARCDE-FGH1J-KLMNQ-PQRST-UVWXY ARCDE-FGH1J-KLMN0-PQRST-UVWXY A8CDE-FGHIJ-KLMNO-PQRST-UVWXY A8CDE-FGHIJ-KLMNQ-PQRST-UVWXY A8CDE-FGHIJ-KLMN0-PQRST-UVWXY A8CDE-FGH1J-KLMNO-PQRST-UVWXY A8CDE-FGH1J-KLMNQ-PQRST-UVWXY A8CDE-FGH1J-KLMN0-PQRST-UVWXY

または別の行で/他のコマンドで使用されます:

> for a in A{B,E,R,8}CDE-FGH{I,1}J-KLMN{O,Q,0}-PQRST-UVWXY; do echo $a; done
ABCDE-FGHIJ-KLMNO-PQRST-UVWXY
ABCDE-FGHIJ-KLMNQ-PQRST-UVWXY
ABCDE-FGHIJ-KLMN0-PQRST-UVWXY
ABCDE-FGH1J-KLMNO-PQRST-UVWXY
ABCDE-FGH1J-KLMNQ-PQRST-UVWXY
ABCDE-FGH1J-KLMN0-PQRST-UVWXY
AECDE-FGHIJ-KLMNO-PQRST-UVWXY
AECDE-FGHIJ-KLMNQ-PQRST-UVWXY
AECDE-FGHIJ-KLMN0-PQRST-UVWXY
AECDE-FGH1J-KLMNO-PQRST-UVWXY
AECDE-FGH1J-KLMNQ-PQRST-UVWXY
AECDE-FGH1J-KLMN0-PQRST-UVWXY
ARCDE-FGHIJ-KLMNO-PQRST-UVWXY
ARCDE-FGHIJ-KLMNQ-PQRST-UVWXY
ARCDE-FGHIJ-KLMN0-PQRST-UVWXY
ARCDE-FGH1J-KLMNO-PQRST-UVWXY
ARCDE-FGH1J-KLMNQ-PQRST-UVWXY
ARCDE-FGH1J-KLMN0-PQRST-UVWXY
A8CDE-FGHIJ-KLMNO-PQRST-UVWXY
A8CDE-FGHIJ-KLMNQ-PQRST-UVWXY
A8CDE-FGHIJ-KLMN0-PQRST-UVWXY
A8CDE-FGH1J-KLMNO-PQRST-UVWXY
A8CDE-FGH1J-KLMNQ-PQRST-UVWXY
A8CDE-FGH1J-KLMN0-PQRST-UVWXY

それとも、すでにこれを知っていて、他の理由で sed/awk が必要ですか?

于 2012-05-26T00:09:22.807 に答える
0

代わりに、おそらく Ruby、Python、または Perl を選択します。そして、それが私だけのものであればfor、次の疑似コードのような一連のネストされたループを使用して、非常に安価なことを行います。

string = "A%sCDE-FGH%sJ-KLMN%s-PQRST-UVWXY"

for a in ["B", "E", "R", "8"]
  for b in ["I", "1"]
    for c in ["O" "Q", "0"]
        printf string, a, b, c
    end
  end
end

欠点は、文字列、各ループ内の文字のリストを置き換える必要があり、不明な文字の数に基づいてループをfor追加または削除する必要があることです。forあなたが説明したように、より強力なツールにすることは間違いなくより多くの労力を要しますが、他の人が使用するツールを作成しようとしている場合は、すべての違いが生じる可能性があります.

于 2012-05-26T00:06:44.220 に答える