Замена / соответствие строки Bash: Пропустить первое совпадение - PullRequest
1 голос
/ 29 апреля 2019

У меня есть строка, которая передается в эту команду bash: sed -n '/^[*] / { s/^[*] \(.*\)/\1/; s,/,:,; s/-/ /g; p; }'.Строка всегда будет в следующем формате: XYZ-1234/a-string-of-words-separated-by-dashes.Однако это решение удаляет первую соответствующую черту и не добавляет пробел после двоеточия.Как я могу настроить это так, чтобы вывод: XYZ-1234: A string of words separated by dashes.Также обратите внимание на первый символ после двоеточия.

1 Ответ

1 голос
/ 29 апреля 2019

Вы можете использовать awk следующим образом:

awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' file > newfile

Подробности

  • -F'/' - разделитель полей установлен на /
  • /^[*] / - находит все строки, которые начинаются с * и пробел
  • m=$1;n=$2; - Поле 1 назначено на m, а значение поля 2 назначено на n
  • gsub(/^[*] /, "", m); - удаляет начальные "* "
  • gsub(/-/, " ", n); - заменяет все - пробелом в n
  • print m": "toupper(substr(n,1,1)) substr(n, 2)}' - печатает результат:объединяет m значение, : и пробел, а затем n значение с первой буквой в верхнем регистре.

См. онлайн-демонстрацию :

s="* XYZ-1234/a-string-of-words-separated-by-dashes"
awk -F'/' '/^[*] /{m=$1;n=$2;gsub(/^[*] /, "", m); gsub(/-/, " ", n); print m": "toupper(substr(n,1,1)) substr(n, 2)}' <<< "$s"
# => XYZ-1234: A string of words separated by dashes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...