简体   繁体   中英

Regex to match and split every third occurrence of a string

in a Korn Shell script I have a large amount of data in a string variable contents that matches the following syntax:

account_id_0:group_id_0:name_0
account_id_1:group_id_1:name_1
              ...
account_id_N:group_id_N:name_N

I want to split the string on the : character every third instance so I can generate three other strings accounts , groups , and names that have the format:

accounts = account_id_0,account_id_1,...,account_id_N
groups = group_id_0,group_id_1,...,group_id_N
names = name_0,name_1,...,name_N

The reason I would like to store these in a string rather than an array is for portability across environments.

Am I able to achieve this using something like the sed , cut , or awk command?

the current regex I'm using to capture the accounts is:

[a-zA-Z][0-9]+(?:([a-zA-z]*[0-9]*)*)(?:([a-zA-Z]*[0-9]*)*)

But I feel there is a more efficient alternative.

I have attempted to achieve the desired output using a combination of this solution and this solution however the first one lacks the repetition I require, and the latter is for file manipulation not strings.

I would use arrays, and process the contents variable like reading lines from a file:

contents='account_id_0:group_id_0:name_0
account_id_1:group_id_1:name_1
...:...:...
account_id_N:group_id_N:name_N'

as=()
gs=()
ns=()
while IFS=: read -r a g n; do
    as+=("$a")
    gs+=("$g")
    ns+=("$n")
done <<< "$contents"

accounts=$(IFS=,; echo "${as[*]}")
groups=$(IFS=,; echo "${gs[*]}")
names=$(IFS=,; echo "${ns[*]}")

printf "%s\n" "$accounts" "$groups" "$names"
account_id_0,account_id_1,...,account_id_N
group_id_0,group_id_1,...,group_id_N
name_0,name_1,...,name_N

If you're getting the contents value from a file, you can skip the step of storing it in a variable and just read the file directly.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM