Bashを使用してテキストファイルからタグ付き文字列を抽出する

Bashを使用してテキストファイルからタグ付き文字列を抽出する

次のスタイルのファイルがあります。これは#環境に応じてパラメータ化された構成ファイルであり、文字の値はデータベースの実際の値に置き換えられます。

ABC=#PARAMETER_1#:#PARAMETER_2#
SOMETHING_ELSE=#PARAMETER_1#
SOMETHING_NEW=#PARAMETER_2##PARAMETER_3#

#必要なパラメータを簡単に識別できるように、このファイルからハッシュ/ポンド()文字間の値を抽出したいと思います。標準列の幅やそれに類似したものはなく、唯一の標準は、#2つの文字間のすべての内容がデータベースの値に置き換えられることです。

以下は理想的なクリーンアップと重複排除出力です。

PARAMETER_1
PARAMETER_2
PARAMETER_3

私は見たこれ質問ですが、重要な違いは、私の場合、特定の行に複数の変数がある可能性があることです。

私はこの質問にBashでタグ付けしましたが、必ずしもそうではありません。 Perlなどかもしれません。 Unixのコマンドラインで実行するだけです。

答え1

最初は次のように考えましたawk

awk -vRS='#[^#]+#' 'RT{gsub(/#/,"",RT);p[RT]=1}END{for(i in p)print i}' the_file

ただし、この決定は、あなたがしなければならない他の作業によって異なります。


説明するコメントでリクエストしたとおり。

awk -vRS='#[^#]+#' '   # use /#[^#]+#/ as record separator
RT {   # record terminator not empty?
  gsub(/#/,"",RT)    # remove the # parameter delimiter markup
  p[RT]=1   # store it as key in array p
}
END {   # end of input?
  for (i in p) print i   # loop through array p and print each key
}' the_file

重要な部分は、RT(レコードの終端)組み込み変数を使用することです。

   RT          The record terminator.  Gawk sets RT to the input text that
               matched the character or regular expression specified by
               RS.

関連情報