Я устанавливаю переменную $hack
, которую я хочу развернуть и вставить после первой строки в a text file. Первая строка содержит этот текст: project(libpyside)
Как расширить переменную при использовании sed?
Пробовал так:
$ sed -i "s|project(libpyside)|project(libpyside)\n$hack|" CMakeLists.txt
sed: -e expression #1, char 124: unterminated `s' command
... и это:
$ sed -i "/project(libpyside)/ r $hack" CMakeLists.txt
sed: -e expression #1, char 222: unknown option to `s'
... и это:
$ sed -i -e "2i${hack}" CMakeLists.txt
sed: -e expression #1, char 201: unknown option to `s'
Это мой $hack
переменная:
hack='#HACK: CMake with broken Qt5Qml_PRIVATE_INCLUDE_DIRS, Qt5Quick_PRIVATE_INCLUDE_DIRS
if(${Qt5Qml_FOUND})
if(NOT "${Qt5Qml_PRIVATE_INCLUDE_DIRS}" MATCHES "/QtQml/")
string(REPLACE "/QtCore" "/QtQml" replaceme "${Qt5Core_PRIVATE_INCLUDE_DIRS}")
list(APPEND Qt5Qml_PRIVATE_INCLUDE_DIRS ${replaceme})
list(REMOVE_DUPLICATES Qt5Qml_PRIVATE_INCLUDE_DIRS)
endif()
endif()
if(${Qt5Quick_FOUND})
if(NOT "${Qt5Quick_PRIVATE_INCLUDE_DIRS}" MATCHES "/QtQuick/")
string(REPLACE "/QtCore" "/QtQuick" replaceme "${Qt5Core_PRIVATE_INCLUDE_DIRS}")
list(APPEND Qt5Quick_PRIVATE_INCLUDE_DIRS ${Qt5Qml_PRIVATE_INCLUDE_DIRS})
list(APPEND Qt5Quick_PRIVATE_INCLUDE_DIRS ${replaceme})
list(REMOVE_DUPLICATES Qt5Quick_PRIVATE_INCLUDE_DIRS)
endif()
endif()'
Что я делаю неправильно?
Причина, по которой я не помещаю это в файл, я делаю все это из файла Docker.
эту мощь лучше, чем использовать переменную ... http://stackoverflow.com/questions/16715373/insert-contents-of-a-file-after-specific-pattern-match .. и 'sed -i' дважды - опечатка? – Sundeep
Типичный фиксированный. 'sed -i"/project (libpyside)/r $ {hack} "CMakeLists.txt" дает мне выражение sed: -e # 1, char 222: неизвестный параметр '' s'' – fredrik
Вы должны убедиться, что $ hack содержит регулярное выражение в синтаксисе Sed. Ваш пример показывает, что это не так. Ваш вопрос заключается не в том, как развернуть, а как процитировать. – ceving