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