sed/awk を使用してファイルから必要な行を取得する bash

sed/awk を使用してファイルから必要な行を取得する bash

ファイルの内容は次のとおりです。

Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text_1
    text_2:
    - text
    - file3:\\
Text3:
    etc

出力:指定されたTextnの "file:\"エントリを印刷します。これを達成するために、Linuxでsed / awkコマンドを使用する方法を知ってください。

例: test.txt ファイルの内容は次のとおりです。

$ cat test.txt 
Text1:
    text_1: Text1 text_1
    text_2:
    - text
    - file1:\\
    - file2:\\
Text2:
    text_1: Text2 text1
    text_2:
    - text
    - file3:\\
Text3:
    etc

提案されているように、以下のgrepコマンドを試してください。これにより、test.txtファイルのすべての "file:\"エントリが印刷されます。 "Text1:" 一致の場合は出力として file1:\ と file2:\ のみが必要で、"Text2:" の場合は file3:\ のみ一致します。

ベストアンサー1

yq新しく更新されたYAMLファイルに使用するには、次fileの値を選択できます。

yq '.Text1.text_2[] | select(. == "file*")' file.yaml

出力

file1:\\
file2:\\

別の値を選択したい場合は、TextN適切なキー値を渡して次のようにします。

for key in Text1 Text2
do
    printf 'Key %s:\n' "$key"
    yqText="$key" yq 'eval("." + env(yqText) + ".text_2[]") | select(. == "file*")' file.yaml |
        while IFS= read -r val
        do
            printf 'Value: %s\n' "$val"
        done
    echo
done

まだインストールしていない場合は、yqGithubリポジトリから直接インストールできます。https://github.com/mikefarah/yq、またはホスティング環境の場合は、変更掲示板にお問い合わせください。

おすすめ記事