sedを使用してファイルにパターンを挿入できますか?

sedを使用してファイルにパターンを挿入できますか?

次に始まるファイルを作成したいと思います。

# topics-to-move.json
{
    "topics": [],
    "version": 1
}

{ "topic": "<topic_name>" }に項目がありません"topics":[]。きれいなリストを提供する他のスクリプトからテーマ名を取得できます。

Topic..A
Topic..B
Topic..C

topics-to-move.json上記の各内容をファイル形式で挿入したいと思います。 ?または、同様のものを使用して{"topic":"Topic..A"},{"topic":"Topic..B"},{"topic":"Topic..C"}これを達成できますか?sed

わかりやすくするために、最終文書は次のとおりです。

# topics-to-move.json
{
    "topics": [
        {"topic":"Topic..A"},
        {"topic":"Topic..B"},
        {"topic":"Topic..C"}
    ],
    "version": 1
}

ベストアンサー1

一連のsedコマンドといくつかのチートを使いましょう。

最初の行を変更して開始点を表示するには、インライン置換を実行します。

sed -i 's/"topics": \[\],/"topics": \[/g' file.out

次に、元の行の末尾を再度追加し、先頭のスペースを4つにフォーマットします。

sed -i '/"topics": \[/a\ \ \ \ \],' file.out

次に、別のファイルから配列を作成します。

IFS=$'\n'
topic=( $(sed -n '/^Topic/p' file.in) )
unset IFS

次に、配列の逆順で最初の2つのsedの間のスペースを埋めます。

for (( i=${#topic[@]}-1 ; i>=0 ; i-- )); do sed -E -i '/"topics": \[/a\ \ \ \ {"topic":"'"${topic[$i]}"'},' file.out; done

出力は正しいです(1つのカンマを除く)。

# topics-to-move.json
{
    "topics": [
        {"topic":"Topic..A"},
        {"topic":"Topic..B"},
        {"topic":"Topic..C"},
    ],
    "version": 1
}

おすすめ記事