预期行为(开始时为空列(:
"PostgreSQL" : {
"Host" : "localhost",
"Port" : 5432,
"Database" : "dbname",
"Username" : "dbuser",
"Password" : "dbpass",
},
当我想在json文件的第46行插入这个时,我的当前命令:
sed -i '46i "PostgreSQL" : {n "Host" : "localhost",n "Port" : 5432,n "Database" : "dbname",n "Username" : "dbuser",n "Password" :"dbpass",n },' file.json
但是在46i和";PostgreSQL";不影响文本,从第一列开始。我该怎么解决这个问题?或者也许还有更优雅的方式来达到目标?我考虑printf或echo,但我必须在特定行插入此文本。
根据我的经验,最简单的方法是将要插入的文本保存为具有正确空格/格式的文件,然后使用sed将text_to_be_inserted.txt
插入到文件中,例如
cat text_to_be_inserted.txt
"PostgreSQL" : {
"Host" : "localhost",
"Port" : 5432,
"Database" : "dbname",
"Username" : "dbuser",
"Password" : "dbpass",
},
# Insert text from `text_to_be_inserted.txt` into 'file.txt' at line 46 with
sed '46 r text_to_be_inserted.txt' file.txt
这可能适用于您(GNU sed和bash(:
cat <<! | sed -i '46{h;s/S.*//;s/.*/cat -|sed "s#^#& #"/ep;x}' file
"PostgreSQL" : {
"Host" : "localhost",
"Port" : 5432,
"Database" : "dbname",
"Username" : "dbuser",
"Password" : "dbpass",
},
!
这在输入文件的第46行之前插入此处的文档,保留第46行的缩进并将其再增加2个空格。
要在第46行后面附加保留相同的缩进,请使用:
cat <<! | sed -i '46{p;s/S.*//;s/.*/cat -|sed "s#^#&#"/ep;d}' file
"PostgreSQL" : {
"Host" : "localhost",
"Port" : 5432,
"Database" : "dbname",
"Username" : "dbuser",
"Password" : "dbpass",
},
!