在文件中插入以X列开头的文本



预期行为(开始时为空列(:

"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",
},
!

最新更新