Шаблон Shell Script для вставки запятой в строковую переменную перед указанным ключевым словом c - PullRequest
0 голосов
/ 25 марта 2020

В скрипте bash / shell,

У меня есть строковая переменная "metaItems" с 2 значениями

metaItems= src/profiles/API Only.profile src/profiles/Chatter External User.profile

Я хочу вставить запятую перед каждым значением "src /" и сохранить значения в массиве, как показано ниже, например,

array= {src/profiles/API Only.profile,src/profiles/Chatter External User.profile}

как этого добиться?

Ответы [ 3 ]

1 голос
/ 25 марта 2020

Вы на самом деле не хотите вставлять ',', но вместо этого вы хотите вставить '\n', чтобы вы могли установить IFS ( Внутренний разделитель полей ) на разбиение по словам на перевод строки и разделение ваших строк на отдельные элементы массива.

Например:

#!/bin/bash

metaItems="src/profiles/API Only.profile src/profiles/Chatter External User.profile"

oifs="$IFS"     # save original IFS
IFS=$'\n'       # set IFS to split on '\n'

arr=( $(sed 's|\ src/|\nsrc/|g' <<< $metaItems) )

IFS="$oifs"     # restore original IFS

declare -p arr

Пример использования / Вывод

С приведенным выше сценарием в splitarray,

$ bash splitarray
declare -a arr=([0]="src/profiles/API Only.profile" [1]="src/profiles/Chatter External User.profile")

Которые показывают желаемые строки, разделенные на отдельные элементы массива arr.

0 голосов
/ 25 марта 2020
$echo  $metaItems 
src/profiles/API Only.profile src/profiles/Chatter External User.profile
$IFS=',' read -ra array <<< $(echo  $metaItems | sed 's#src\/#,&#g') 
$for i in "${array[@]}"; do echo $i; done

src/profiles/API Only.profile
src/profiles/Chatter External User.profile
$

0 голосов
/ 25 марта 2020
echo "metaItems= src/profiles/API Only.profile src/profiles/Chatter External User.profile" | sed -r -e "s/([^=]) src/\1,src/g" -e "s/metaItems= (.*)/array= {\1}/"
...