0

暗号化する文字列を含むテキスト ファイルがあります。これらの文字列はタグで示されます。

例:

This is an <tag> example </tag>.

UNIX で (sed、bash などの一般的なツールを使用して) すべての出現箇所を検索し、同時にそれを暗号化された値に置き換える最良の方法は何ですか (これはタグ内の文字列の機能です)。

結果:

This is an <tag> <encrypted value here> </tag>.

前もって感謝します!

4

2 に答える 2

0

4 つの不明確な条件を想定します。

  1. 開始タグと終了タグは同じ行にある必要はありません。
  2. 暗号化機能は些細な変更ではありません。
  3. タグは1種類のみです。
  4. いかなる種類のネスティングもありません。

その場合、bash、sed、awk はすべて面倒です。Perl または Python を使用する方がよいでしょう。以下はアルゴリズムです。

  1. tag_flag を 0 に初期化します。
  2. ファイルを 1 語ずつ (または 1 行ずつ、各行を分割して) 読み取ります。
  3. tag_flag が 0 で、開始タグが見つからない場合は、すべてをそのまま出力します。
  4. 開始タグに遭遇したら、tag_flag を 1 に設定します。単語ごとに読み続けて、to_be_encrypted 文字列に収集されます。
  5. 終了タグに遭遇したら、暗号化関数の出力を to_be_encrypted に出力し、tag_flag を 0 に設定します。
于 2012-06-21T02:19:00.127 に答える
0

わかりました、数日前に解決策を見つけることができました。bash と正規表現を使用しました。

これが私がやった方法です:

#!/bin/bash

REGEX='^(.*<tag>)(.*)(<\tag>.*)$'

function process()
{
   RESULT= #do processing of $1 here
}

while read line ; do
   while [[ $line =~ "$REGEX" ]] ; do
      process "${BASH_REMATCH[2]}"
      line="${BASH_REMATCH[1]}$RESULT${BASH_REMATCH[3]}"
   done
   echo "$line" > "$OUTPUT_FILE"
done < "$FILE"
于 2012-06-27T05:08:18.343 に答える