From 0d6b4c221f8e29f3dc308f5efcc37385dab12e9b Mon Sep 17 00:00:00 2001 From: Toke Eskildsen <te@ekot.dk> Date: Thu, 28 Nov 2013 14:14:07 +0100 Subject: [PATCH] fixes #8 (newlines in all replacements) --- quack.sh | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/quack.sh b/quack.sh index a3d3413..79d75eb 100755 --- a/quack.sh +++ b/quack.sh @@ -200,7 +200,14 @@ function template () { # We need to escape \, &, / and newline in replacement to avoid sed problems # http://stackoverflow.com/questions/407523/escape-a-string-for-sed-search-pattern # http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n - ( echo -n "s/\${$PATTERN}/" ; echo -n "$REPLACEMENT" | sed -e 's/[\\/&]/\\&/g' | awk 1 ORS="\\\\&br;" ; echo "/g" ) | sed -f - -i $TEMPLATE + + if [ "$REPLACEMENT" == "`echo -n \"$REPLACEMENT\" | tr '\\n' '*'`" ]; then + # No newlines, especially no trailing ones! + ( echo -n "s/\${$PATTERN}/" ; echo -n "$REPLACEMENT" | sed -e 's/[\\/&]/\\&/g' | sed ':a;N;$!ba;s/\n/\\\&bt;/g' ; echo "/g" ) | sed -f - -i $TEMPLATE + else + # The awk-version always adds a trailing newline, even when the input has none + ( echo -n "s/\${$PATTERN}/" ; echo -n "$REPLACEMENT" | sed -e 's/[\\/&]/\\&/g' | awk 1 ORS="\\\\&br;" ; echo "/g" ) | sed -f - -i $TEMPLATE + fi # Insert into template, then unescape newlines sed 's/\&br;/\n/g' -i $TEMPLATE } @@ -494,7 +501,7 @@ function resolveAlternatives() { local ID=`echo $IMAGE | grep -o "[0-9][0-9][0-9][0-9]-.*"` if [ "." == ".$ID" ]; then - echo " Unable to extract ID for \"$IMAGE\"" + echo " Unable to extract ID for \"$IMAGE\". No alternatives lookup" return fi -- GitLab