Awk Can';t用sed将字符串替换为多行字符串

Awk Can';t用sed将字符串替换为多行字符串,awk,sed,Awk,Sed,我试图用sed将文本中的固定解析(“replaceMe”)替换为多行文本。 我的bash脚本如下所示: content=$(awk'{print $5}' < data.txt | sort | uniq) target=$(cat install.sh) text=$(sed "s/replaceMe/$content/" <<< "$target") echo "${text}" 我读过关于“获取”多行内容的内容,但是我找不到关于放置多行字符串的内容,这取决于dat

我试图用sed将文本中的固定解析(“replaceMe”)替换为多行文本。 我的bash脚本如下所示:

content=$(awk'{print $5}' < data.txt | sort | uniq)
target=$(cat install.sh)
text=$(sed "s/replaceMe/$content/" <<< "$target")
echo "${text}"

我读过关于“获取”多行内容的内容,但是我找不到关于放置多行字符串的内容,这取决于
data.txt
,因为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 )"

sed
用换行符终止命令。您无法可靠地将多行与sed一起使用。通过
awk'{print$5}'
-您真的需要对输入进行排序,还是只是试图获取唯一的值,但顺序并不重要?@EdMorton order不重要。。。我在某个地方读到,你应该在“uniq”之前“sort”是
uniq
只对连续的相同值起作用,比如你从排序后的输入中得到的值,但是
sort | uniq
相当于只
sort-u
,当你使用awk时,你也不需要得到唯一的值(例如
awk'!seen[$0]++'file
单独输出来自
file
)的唯一值,这就是我问的原因。
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 )"