Я новичок в unix и пытаюсь выполнить следующую команду, используя сценарий оболочки "setup.sh"
if [ `grep -c 'pro-ad-assembly-0.1' /usr/local/conf/jobserver.conf` = 0 ]; then
sed -i "\$aspark {\n jobserver {\n job-bin-paths {\n ad-scala=\"/opt/scala/pro-ad-assembly-0.1-SNAPSHOT.jar\"\n }\n }\n}" /usr/local/conf/jobserver.conf
fi
но jobserver.conf не обновляется должным образом и возвращает
include file("/hb/data/spark/job-server/jobserver.conf")
spark.context-settings.memory-per-node = ${SPARK_EXECUTOR_MEMORY}
spark {n jobserver {n job-bin-paths {n advisor-scala = "/opt/scala/pro-ad-assembly-0.1-SNAPSHOT.jar"n }n }n}
поскольку символ новой строки не работает, а n остается при обновлении файла jobserver.conf
Когда я пытаюсь запустить
if [ `grep -c 'pro-ad-assembly-0.1' /usr/local/conf/jobserver.conf` = 0 ]; then
sed -i "\$aspark {\n jobserver {\n job-bin-paths {\n ad-scala=\"/opt/scala/pro-ad-assembly-0.1-SNAPSHOT.jar\"\n }\n }\n}" /usr/local/conf/jobserver.conf
fi
в терминале только тогда он работает нормально, но не тогда, когда я делаю то же самое через сценарий оболочки
Это мой сценарий оболочки
#!bin/sh
# Update jobserver config
if [ `grep -c 'pro-ad-assembly-0.1' /usr/local/conf/jobserver.conf` = 0 ]; then
sed -i "\$aspark {\n jobserver {\n job-bin-paths {\n ad-scala=\"/opt/scala/pro-ad-assembly-0.1-SNAPSHOT.jar\"\n }\n }\n}" /usr/local/conf/jobserver.conf
fi
Я делаю что-то неправильно Может кто-нибудь мне помочь
"\n" и '\n' - две разные вещи. Вы использовали первое, но я полагаю, вы хотели второе.





#! bin / sh
sed -i '$ a spark { \n jobserver {\n job-bin-paths {\n text here }\n }\n}"' test.txt
Это пример сценария, который выводит данные в виде новой строки «\ n».
sed хорош для разбора отдельных строк. Это xyproblem.info. Что ты на самом деле пытаешься сделать? (т.е. обновление конфигурации). Чтобы сопоставить несколько строк, вам нужно добавить несколько строк в пространство шаблонов в sed с помощью команды
n.