无法使用sed将字符串替换为多行字符串

时间:2019-06-24 11:09:09

标签: 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}"

如果内容仅包含一行,则替换有效,但如果包含sevrel行,我将得到:

sed:... untarminated `s' command

我读到有关“获取”多行内容的信息,但是找不到有关放置多行字符串的内容

1 个答案:

答案 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 )"