提问人:Vancho 提问时间:11/13/2023 最后编辑:tripleeeVancho 更新时间:11/14/2023 访问量:58
Sed 将单个文本替换为文件内容
Sed replace single text with content of file
问:
我有一个关于使用 .sed
我有一个JSON文件,我想把它插入到另一个文件中。
我正在尝试获取包含 4500 行的文件的所有内容,并替换我的 HTML 中的特定文本:.json
{DATA_INPUT}
我一直在使用
DATA_JSON=$(echo "$(<data.json)")
sed -i "s/{DATA_INPUT}]{\}/${DATA_JSON}{\}/g" convert.html
但似乎不起作用,
我得到了
/bin/find: Argument list too long
我也试过:
DATA_JSON=$(echo "$(<data.json)")
find . -maxdepth 1 -type f -name 'convert.html' \
-exec sed -n "s/{DATA_INPUT}/${DATA_JSON}/g" {} \;
但是得到:
/bin/sed: Argument list too long
我正在尝试将其与 Bash 集成。
所以基本上我正在尝试从文件中获取所有内容并替换我的文本convert.html
答:
2赞
tripleee
11/13/2023
#1
sed
已经知道如何插入文件的内容。
sed -i '/{DATA_INPUT}/r data.json' convert.html
单独而言,这将在匹配后插入以下行的内容。如果你也想操纵比赛,也许可以尝试类似的东西data.json
sed '/{DATA_INPUT}/!b;s///;r data.json' convert.html
(可能会省略 直到您满意您有一个工作脚本)但这仍然相当笨拙,如果您想保留令牌周围的上下文并将其保留在插入内容的任一侧,则无法正常工作。-i
{DATA_INPUT}
也许尝试例如 Awk 或 Perl 会更有成效,它们的只读性较低;
awk 'NR==FNR { gsub(/&/, "\\\\&"); lines = lines (lines ? "\n" : "") $0; next }
/\{DATA_INPUT\}\{\}/ { sub(/\{DATA_INPUT\}/, lines) }
1' data.json convert.html >new.html
评论
0赞
potong
11/13/2023
也许在 GNU sed 中?sed 's/{DATA_INPUT}//;T;r data.json' convert.html
0赞
tripleee
11/13/2023
@potong 我通常尽量避免使用不可移植的结构(尽管即使在 MacOS / BSD 上也不能开箱即用;你不得不说sed
b
-e '/{DATA_INPUT}/!b' -e 's///;r data.json'
)
0赞
Vancho
11/13/2023
@tripleee效果很好,除了:运行我得到的地方:s'command''我只想删除DATA_INPUT部分并替换data.json中的内容sed -i "s/{DATA_INPUT}/r data.json" convert.html
sed: -e expression #1, char 26: unterminated
0赞
Vancho
11/13/2023
' sed -i '/{DATA_INPUT}/!b;s///;r data.json' convert.html ' 完美工作!
0赞
potong
11/13/2023
也许?在关闭之前可能需要另一个。sed -e '/{DATA_INPUT}/{s///;r data.json' -e '}' convert.html
;
}
评论
DATA_JSON="$(<data.json)"
echo
find
find
find