我想在使用 shell 腳本的特定模式之后將多行插入到 .json 檔案中。還需要考慮在第 n 次出現時插入。
讓我們考慮一下我的輸入檔案內容是:input.txt:
[
{
"a": "a",
"b": "b"
},
{
"c": "c",
"d": "d"
},
{
"e": "e",
"f": "f"
}
]
在我的第一種情況下,我必須在第一次出現模式“}”之后插入以下兩行 ,在我的第二種情況下,在 input.txt 檔案中第二次出現模式“}”之后插入相同的兩行
插入我的檔案后應該改變如下:
第一種情況:插入x & y條目
[
{
"a": "a",
"b": "b"
},
{
"x": "x",
"y": "y"
},
{
"c": "c",
"d": "d"
},
{
"e": "e",
"f": "f"
}
]
第二種情況:插入m & n條目
[
{
"a": "a",
"b": "b"
},
{
"c": "c",
"d": "d"
},
{
"m": "m",
"n": "n"
}
{
"e": "e",
"f": "f"
}
]
我正在我的 shell scipt 中使用sed命令嘗試此操作。但這總是在第一次出現而不是第 n 次出現時替換。
sed -e '0,/},/{//a\ {\n "x",\n "y"\n },' -e '}' input.txt file
誰能幫我?
uj5u.com熱心網友回復:
如果你使用jq它就像
jq '.[:1] [{"x":"x", "y":"y"}] .[1:]' input.json
演示
和
jq '.[:2] [{"m":"m", "n":"n"}] .[2:]' input.json
演示
分別。
uj5u.com熱心網友回復:
如果它是您打算重用的東西,您可以在 python 中執行它。
#! /usr/bin/env python3
import json
import sys
j = json.load(sys.stdin)
j.insert(int(sys.argv[1]), json.loads(sys.argv[2]))
print(j)
你可以呼叫它傳遞位置和物件作為引數
./json-insert 1 '{"x": "x", "y": "y"}' < input.json
uj5u.com熱心網友回復:
cat file.json|tr '\n' ' '| sed 's/},/},{"x":"x", "y":"y"},/2'|json_pp
[
{
"a" : "a",
"b" : "b"
},
{
"c" : "c",
"d" : "d"
},
{
"x" : "x",
"y" : "y"
},
{
"e" : "e",
"f" : "f"
}
]
#------------------------------------------------ -------------
cat file.json|tr '\n' ' '| sed 's/},/},{"x":"x", "y":"y"},/2'|json_pp > tmp.json
mv tmp.json file.json
uj5u.com熱心網友回復:
這可能對您有用(GNU sed 和 Bash):
cat <<\! | sed -Ee '/\}/{x;s/^/x/;/^x{1}$/{x;r /dev/stdin' -e 'x};x}' file
{
"x": "x",
"y": "y"
},
!
要么:
cat <<\! | sed -Ee '/\}/{x;s/^/x/;/^x{2}$/{x;r /dev/stdin' -e 'x};x}' file
{
"m": "m",
"n": "n"
},
!
要插入/dev/stdin到 sed 呼叫中的管道字串,使用保持空間中的計數器來啟動字串的放置。
注意 該命令必須由換行符終止,因此使用命令選項r將 sed 命令分成兩部分的原因。-e可以將字串收集在此處的檔案中,并/dev/stdin使用命令傳遞給以下管道cat。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432226.html
下一篇:查找以相同17個字符結尾的檔案組
