我试图用sed多行文本替换文本中的固定解析(“ replaceMe”)。 我的bash脚本如下:
content=$(awk'{print $5}' < data.txt | sort | uniq)
target=$(cat install.sh)
text=$(sed "s/replaceMe/$content/" <<< "$target")
echo "${text}"
如果内容仅包含一行,则替换有效,但如果包含sevrel行,我将得到:
sed:... untarminated `s' command
我读到有关“获取”多行内容的信息,但是找不到有关放置多行字符串的内容
答案 0 :(得分:1)
根据data.txt
的内容,您将遇到的问题要多得多,因为sed无法理解文字字符串(请参阅Is it possible to escape regex metacharacters reliably with sed)。只需使用awk即可:
text="$( awk -v old='replaceMe' '
NR==FNR {
if ( !seen[$5]++ ) {
new = (NR>1 ? new ORS : "") $5
}
next
}
s = index($0,old) { $0 = substr($0,1,s-1) new substr($0,s+length(old)) }
{ print }
' data.txt install.sh )"