次に始まるファイルを作成したいと思います。
# 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
}