Невозможно заменить строку на многострочную строку с помощью sed - PullRequest
1 голос
/ 24 июня 2019

Я пытаюсь заменить фиксированный синтаксический анализ ("replaceMe") в тексте многострочным текстом с помощью sed.Мой bash-скрипт выглядит следующим образом:

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

Если содержимое содержит только одну строку, замена работает, но если оно содержит несколько строк, я получаю:

sed:... untarminated `s' command

Я читаю о "получении"мультилинейный контент, но я не смог найти что-то о размещении мультилинейной строки

1 Ответ

1 голос
/ 24 июня 2019

У вас будет больше проблем, чем в зависимости от содержимого data.txt, так как sed не понимает буквальные строки (см. Можно ли надежно экранировать метасимволы регулярных выражений с помощью 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 )"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...