Похоже, ваш файл key.txt имеет неверное значение. Судя по первой команде sed:
sed '/^[[:blank:]]*$/d; s|^|s/%%|; s|:|%%/|; s|$|/|' key.txt
ожидается, что каждая строка будет содержать точку с запятой. Затем он формирует код sed для второй команды sed:
sed -f - file1.txt > file2.txt
Если ваш key.txt содержит непустые строки без точки с запятой, вы получите ошибку unterminated 's' command
.
Убедитесь, что key.txt правильный, или хотя бы добавьте /:/!d;
в свой конвейер. Как это:
sh '''sed '/^[[:blank:]]*$/d;/:/!d;s|^|s/%%|;s|:|%%/|;s|$|/|' key.txt | sed -f - file1.txt > file2.txt'''
Например, правильное содержимое key.txt:
username:server1
Неверный key.txt:
username server2
В этой строке нет точки с запятой, поэтому это приведет к ошибке.
Вы можете попробовать заменить первую команду sed более простой:
sed '/:/!d;s|^\([^:]*\):\(.*\)$|s/%%\1%%/\2/|' key.txt
или лучше:
sed -e '/:/!d;s|^\([^:]*\):\(.*\)$|s/%%\1%%/\2/|' -e 'N;s|\n/|/|' key.txt
Если это не поможет, запустите xxd key.txt
или hexdump -C key.txt
и опубликуйте вывод.
После того, как вы добавили шестнадцатеричное содержимое вашего файла key.txt, я наконец смог воспроизвести проблему на моем компьютере. Проблема может быть решена с помощью этой команды:
sed -e '/:/!d;s|^\([^:]*\):\(.*\)\r|s/%%\1%%/\2/|' key.txt
Таким образом, хитрость заключается в использовании \r
вместо $
в первой команде sed. Если он все еще не работает для вас (возможно, если вы используете MacOS), вы можете просто удалить возврат каретки из файла key.txt с помощью выбранного вами инструмента (например, dos2unix
) и тогда ваш оригинальный код должен работать.