特定の設定ファイルに対して[default]で始まる行を見つける方法

特定の設定ファイルに対して[default]で始まる行を見つける方法

.aws/config.aws/credentials特定の設定ファイル(たとえば、[default]または)またはファイルの行を解析しようとしています[prod]

ファイルの例

[default]
region = us-east-1
output = json

[nonprod]
region = us-east-1
output = json

[uat]
region = us-east-2
output = json

[prod]
region = us-east-1
output = json

[default]次の設定ファイルの先頭までまたは[prod]ファイルの最後まで検索が開始された場合は、次の行を検索(および表示)する(aws、sed、grepなど)スクリプトを持つ人がいますか?

はい

searchawsconfig default
searchawsconfig prod

答え1

設定ファイルがスペースで区切られている場合は、awkを使用できます。短絡モード前任者。

$ awk -v RS= -v p='[uat]' '$1 == p' yourfile
[uat]
region = us-east-2
output = json

答え2

Perlの「短絡モード」:

$ perl -00 -ne 'print if /\[default\]/' file 
[default]
region = us-east-1
output = json

または

$ perl -00 -ne 'print if /\[prod\]/' file 
[prod]
region = us-east-1
output = json

~/.bashrcたとえば、シェルの初期化ファイルに次の行を追加してシェル関数に切り替えることができます。

searchawsconfig(){
    perl -00 -ne 'print if /\['"$1"'\]/' "$2" 
}

これにより、次のことができます。

$ searchawsconfig prod file 
[prod]
region = us-east-1
output = json

答え3

抽象的な:

awk '$1==p' RS= p='[default]' ./tst

段落モードを使用して、入力ファイルを「空行」(2つの連続行)で区切られたレコードに分割します\n

正規表現のマッチングを実行できます(正規表現[]では特別なのでエスケープ)(^行の先頭を表示するために使用されます)。

awk -vRS='' '/^\[default\]/' ./tst

または、テキストマッチングを実行できます(全体最初ライン):

awk -vRS='' '$1 == "[default]"' ./tst

または(より柔軟に)コマンドラインで設定された変数を使用します。

awk '$1==p' RS= p='[default]' ./tst

../=

または環境変数を使用します。

RS='' SECTION='default'   \
    awk   'BEGIN{RS=ENVIRON["RS"]} $1=="[" ENVIRON["SECTION"] "]" ' \
        ./tst

関連情報