上下文是将一些结构化数据转换为JSON/YAML,当某些名称错误地包含破折号(Es)时,它们的前面是冒号(:)。
例如,让我们考虑以下结构化数据:
- name-1: value-1
name-2:
- value-21
- value-22
- name-3: value-3
name-4:
- value-41
- value-42其目标是将前者转变为YAML:
- name_1: value-1
name_2:
- value-21
- value-22
- name_3: value-3
name_4:
- value-41
- value-42陷阱涉及所有列出的值,这些值后面没有冒号。
我尝试了以下(受类似职位启发),但它错误地修改了列表中的值:
sed -E ':l; s/^([^:]*)*-([^[:blank:]]+)/\1_\2/; tl;' file
- name_1: value-1
name_2:
- value_21
- value_22
- name_3: value-3
name_4:
- value_41
- value_42有什么建议吗?
发布于 2019-12-06 18:12:04
你可以用
sed -E ':l; s/^([[:blank:]]*(-[[:blank:]]*)?[^[:space:]:-]*)-([^[:space:]:]*:)/\1_\3/; tl;' file > newfile见演示
regex工作像这样
^ -字符串的开始([[:blank:]]*(-[[:blank:]]*)?[^[:space:]:-]*) - Group 1 (\1):0+水平空白,是-和0+水平空白空间的可选序列,然后是0+ chars,而不是空格、:和-。- -a连字符([^[:space:]:]*:) -第3组(\3):除空白和:以外的0或更多字符,然后是:由于-标签和t循环,对键中的所有t都进行了更改。
https://stackoverflow.com/questions/59217850
复制相似问题