sed: -e выражение # 1, char 8: незавершенная команда `s ' - PullRequest
0 голосов
/ 18 июня 2020

Следующий код:

for project in $projectlist
do
    echo $project
    ssh user@server 'awk "/^\[EARTH]/{flag=1; next} /\[PROJECT]/{flag=0} flag" /filepath/'${project}'/file |
    sed "s/^/'${project}'\;/g" | sed "s/^/test\;/g" | sed "s/\\/\;/g" | sed "s/\;//9g"' >> "$filepath"/data1.csv;

    ssh user@server 'awk "/\[VALUES]/{flag=1; next} /,0/{flag=0} flag" /filepath/'${project}'/file |
    sed "s/^/'${project}'\;/g" | sed "s/^/test\;/g" | sed "s/\\/\;/g" | sed "s/\"//g"' >> "$filepath"/data2.csv;

done

Дает следующий результат для каждой итерации:

sed: -e expression #1, char 8: unterminated `s' command
sed: -e expression #1, char 8: unterminated `s' command

Я пробовал несколько попыток переформатировать et c. но всегда сталкиваюсь с этой проблемой. Я избежал точки с запятой внутри, и ни одна из переменных $ project не имеет косой черты внутри. Есть идеи?

1 Ответ

1 голос
/ 18 июня 2020

Ваш sed "s/\\/\;/g" неверен. Вы можете увидеть проблему, когда вы просто

sed "s/\\/\;/g" <<<x

Вы также получите unterminated `s 'command .

Двойные кавычки включаются \ - экранирование, что означает, что \\ рассматривается как одиночный backsla sh. Следовательно, sed видит команду s/\/\;/g, что, в свою очередь, означает, что он видит только две косые черты вместо одной.

Я не знаю, чего вы хотите достичь, но то есть sed "s/\\//\;/g" будет синтаксически правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...