cd -
на самом деле сокращение для cd "$OLDPWD" && pwd
, где $OLDPWD
устанавливается каждый раз, когда вы меняете каталоги в каталоге, в котором вы только что находились.
Обработка -
зависит от приложения. Некоторые приложения используют -
для обозначения STDIN
, например. grep
, awk
Другие приложения могут использовать -
в качестве сокращения для всего, что они выбирают, как указывает ответ Майкла, с su
, -
в качестве сокращения для --login
s?^//\s*??"
Удалите //
и любые пробелы, следующие из начала строки в строках, содержащих сообщениеQueue.secretKey с:
?
, так как разделитель шаблонов^
совпадает с началом строки //
точно совпадает с тем (на заметке, которая является причиной использования вопросительного знака в качестве разделителя шаблонов, а не с более распространенным /
, что предотвращает довольно сильный уход, потому что в противном случае регекс был бы s/^\/\/\s*//
\s*
GNU sed специфичен для соответствия или большего количества пробелов пробел и/или вкладка ; POSIX sed будет использовать [: пробел:]
И @микшерв только что разместил еще более полный ответ. ..
На любой строке, содержащей строку messageQueue.secretKey
, она удаляет строку //
и последующие пробелы, если они существуют в начале строки, и заменяет первое появление
на содержимое переменной оболочки ${MESSAGEQUEUESECRETKEY}
. Кудряшки {
ограничивают удаление/замену только строками , содержащими строку messageQueue.secretKey
. Эти операции выполняются над файлом, на который ссылается переменная оболочки ${config_file}.
Обратные слеши \\\
продолжают операцию в одну длинную строку - экранируя следующий сразу за \n
ewline символ, когда скрипт считывается оболочкой. Три необходимы, так как они содержатся в двойных кавычках "
и обратный слеш экранируется сам по себе в этом контексте. Таким образом, оболочка получает одну экранированную новую строку и sed
получает одну экранированную новую строку. Хотя я не знаю об оболочке в этом контексте, я не верю, что sed
будет все равно, если новые строки вообще не будут экранироваться.