我正在使用bash
perl
和sed
来获取GraphQL查询并将其转换为TypeScript类型。除了一件之外,我已经弄明白了 - 我无法弄清楚如何在正则表达式匹配中的每一行的末尾插入一个逗号。
这是我成功匹配的原始*.graphqls
文字:
enum ContentType {
LESSON
WARMUP
QUIZ
PROJECT
}
进行匹配的正则表达式(选择enum
和}
之间的所有内容:
s/(?s)(?=enum).*?(})
我可以使用bash
和perl
轻松替换整个细分:
ENUM_MATCH="s/(?s)(?=enum).*?(})/replacement/"
perl -i -0pe "${ENUM_MATCH}" "${FULL_PATH}"
但我需要做的是用相同的文本替换这个枚举文本,除了每个枚举行项目上都有逗号 - 最终结果如下所示:
enum ContentType {
LESSON,
WARMUP,
QUIZ,
PROJECT
}
答案 0 :(得分:1)
答案 1 :(得分:0)
使用逗号逗号:
s{enum[^{]*\{\K([^}]*)}{ $1 =~ s/\n/,\n/gr }seg
不
s{enum[^{]*\{\K([^}]*)}{ $1 =~ s/\n/,\n/gr =~ s/,(?=[^,]*\z// }seg
答案 2 :(得分:0)
awk one-liner适用于您的示例:
awk '/enum .*\{/{print;next}p{print p (/\}/?"":",")}{p=$0}END{print p}' file
答案 3 :(得分:0)
,
之后允许PROJECT
:
awk '$1=="}"{f=0} f{$0=$0 ","} $1=="enum"{f=1} 1' data