shell Sed用文件内容替换单个文本

ffvjumwh  于 6个月前  发布在  Shell
关注(0)|答案(1)|浏览(61)

关于sed的问题
我有一个JSON文件,我想把它插入另一个文件。
我尝试的是获取.json文件的所有内容,该文件包含4500行,并替换HTML中的特定文本:

{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


我想把这个和巴斯结合起来
所以基本上我尝试从文件中获取所有内容并替换convert.html中的文本

hkmswyz6

hkmswyz61#

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

相关问题