Каковы все значения для запятых "," в sed и regex? - PullRequest
3 голосов
/ 30 апреля 2020

Этот скрипт используется в файле установки. sh для IDE Arduino:

  sed -e "s,<BINARY_LOCATION>,\"${SCRIPT_PATH}/arduino\",g" \
      -e "s,<ICON_NAME>,${RESOURCE_NAME},g" "${SCRIPT_PATH}/lib/desktop.template" > "${TMP_DIR}/${RESOURCE_NAME}.desktop"

Файл из архива для Linux 64-битной версии 1.8.12 (текущий, Апрель 2020 г.)

Что делают запятые? У кого-нибудь есть хороший справочник по функции запятых при любых обстоятельствах с помощью sed и regex?

Ниже показано, как я разбил команду и все места, которые я искал. В Интернете много ссылок о том, как манипулировать информацией, содержащей запятые, или добавлять запятые к информации. Функции запятых труднее найти. Поиск "," или "запятая" не дал мне очень далеко. Этот вопрос переполнения стека предназначен для добавления результатов поиска, которые кто-то может найти. Мой интерес - академи c.

***edit note: some of this is wrong. see answer from wjandrea for 
              corrections
sed - stream editor for filtering and transforming text (1)
    -e script, --expression=script
       add the following script to the commands to be executed (1) 
    s substitution
       Its basic concept is simple: the s command attempts to match 
       the pattern space against the supplied regular expression 
       regexp; if the match is successful, then that portion of the 
       pattern space which was matched is replaced with replacement(2,3)
    ,  ???
    <> RegExpression for \< match beginning of word \> end of word (4)
    $  Match the last line. 
       To ALLOW the Unix shell to interpret the dollar sign, put the 
       script in double quotes. sed "s/_terminal-type_/$TERM/g" (5)
    {} A group of commands may be enclosed between { and } characters.
       This is particularly useful when you want a group of commands 
       to be triggered by a single address (or address-range) match.(6)
    g  Copy/append hold space to pattern space. (1) Replace the 
       contents of the pattern space with the contents of the hold 
       space. (7) - find "Special Applications:"

1 Ответ

3 голосов
/ 30 апреля 2020

В sed символ после s используется в качестве разделителя. Sla sh / является стандартом.

Символы / могут быть равномерно заменены любым другим отдельным символом в любой данной команде s.

Сценарий Arduino, вероятно, использует альтернативный разделитель, чтобы избежать косой черты в $SCRIPT_PATH, которая также вряд ли будет содержать запятые. Сравните:

s/<BINARY_LOCATION>/\/some\/path\/arduino/
s,<BINARY_LOCATION>,/some/path/arduino,

Также можно использовать запятую:


Кстати, вторая половина вашего пробоя еще далеко. Вот исправление:

  • В оболочке строки в двойных кавычках подвергаются расширению параметров, поэтому ${SCRIPT_PATH} представляет переменную
  • <> - Это буквально. Вы думаете о \<\>
  • g - "global" - флаг s:

    Применить замену все соответствует регулярному выражению , а не только первому.

...