-1

300,000 行のコードを含むファイルを grep で検索して、いくつかの構造を探す必要があります。

最初の質問

以下の最初のコードのようなコードを見つける必要があります。交互の + - 構造を探しています。他の文字は区切り文字として表示されます。+-+ または -+- も正しいです。以下の例のように、] の後に検索を開始します。

++[>++>+++>+<<<-]>++++++++.---.+.>.<------.+.>.>. ∈ γ, (correct, it is alternating)

++[>++>+++>+<<<-]>+++++.>++++++.>++.++++.-----.>. not ∈ γ (so incorrect +* is followed by +*)

2 番目の質問

以下の最初のコードのようなコードを見つける必要があります。奇数回の出現を探しています - <> の連続したペアと空の <> の間は偶数と見なされるため、正しくありません。

++[>++>+++>+<<<-]>+.>++++++++.<-.----.+++++++.>>. ∈ δ (correct, odd times - between <> )

++[>++>+++>+<<<-]>+++.>++++++.<<-.-.>>--.<---.>>. not ∈ δ (incorrect, even times - between <> )

grep のみが許可されていることに注意してください。最初に行った texteditor は使用しない場合があります。

4

2 に答える 2

0

私はこれを得た:

sed 's/.*]//' file | tr -d "><" | tr -s "+-" | tr -d "." | egrep "\+\+|\-\-"

それはこれを行います:

  1. 最初に角かっこを閉じる前にすべてを無視する

  2. >すべてを削除し<、あなたの説明はそれらに重要性を与えないので

  3. すべて+を絞り込ん-で単一オカレンスにする

  4. すべてのドットを削除

  5. どちらか++または--残っているものを探します

于 2015-01-03T17:19:59.807 に答える
0

両方の正規表現について、使用可能な場合は Perl オプションで egrep を使用します。また、単一の行が必要な場合は、
おそらくクラスから削除できます。\r\n

質問1:

 #  \][^-+\]\r\n]*(?:[-]+[^-+\]\r\n]*)?[+]+[^-+\]\r\n]*[-]+(?:[^-+\r\n]*[+]+[^-+\]\r\n]*[-]*)*[^-+\]\r\n]*$

 \]                                 # ]

 [^-+\]\r\n]*                       # Not - + ] or newline

 (?: [-]+  [^-+\]\r\n]* )?          # Optional - .

 [+]+ [^-+\]\r\n]* [-]+             # Required + . -

 (?:
      [^-+\r\n]* 
      [+]+ [^-+\]\r\n]* [-]*        # Optional +
 )*

 [^-+\]\r\n]*                       # Not - + ] or newline
 $

質問2:

 # ^(?![^\r\n]*<(?:[^-<>\r\n]*[-][^-<>\r\n]*[-])*[^-<>\r\n]*>)[^\r\n]*<[^-<>\r\n]*[-](?:[^-<>\r\n]*[-][^-<>\r\n]*[-])*[^-<>\r\n]*>

 ^ 
 (?!               # Not an even sequence
      [^\r\n]* 
      <      
      (?:
           [^-<>\r\n]* 
           [-] 
           [^-<>\r\n]* 
           [-] 
      )*
      [^-<>\r\n]* 
      >
 )

 [^\r\n]*     

 <                 # First odd sequence
 [^-<>\r\n]* 
 [-] 
 (?:
      [^-<>\r\n]* 
      [-] 
      [^-<>\r\n]* 
      [-] 
 )*
 [^-<>\r\n]* 
 >
于 2015-01-03T18:02:28.063 に答える