如何grep以逗号分隔的多行格式的云函数?



我一直在尝试使用grep/awk/sed获取云函数,但是当前命令不能以多行格式获取云函数。

这是在运行时作为变量传递的当前命令:

deploy.sh

functions_list=$(grep 'export' src/index.ts | awk -F '[}{]' '{print $2}' | sed 's/^ *//; s/ *$//; /^$/d' | grep -v somefunction || echo '')

index.ts

export { functionA } from './functions';
export { functionB } from './functions';
export {
functionC,
functionD,
functionE
} from './functions';
export { functionF } from './functions';
export { functionG } from './functions';

输出如下:

functionA
functionB
functionF
functionG

谁知道如何让输出变成这样?

functionA
functionB
functionC
functionD
functionE
functionF
functionG

参见最后命令:

functions_list=$(awk 1 ORS=' ' src/index.ts | sed -e 's/    / /g ; s/;/n/g' | awk -F '[}{]' '{print $2}' | sed 's/^ *//; s/ *$//; /^$/d; s/,  /n/g' | grep -v somefunction || echo '')

awk逐行读取/扫描输入;因此跳过functionC、functionond和functionone因为它们不属于所提供的模式:

'[}{]' '{print $2}'

我添加了awk/sed命令,最初用空格替换新行。

awk 1 ORS=' ' src/index.ts | sed -e 's/    / /g ; s/;/n/g'

最后,用换行符替换逗号。

s/,  /n/g

这里的解析非常脆弱。在不使事情过于复杂的情况下,尝试切换到Perl,它允许您一次检查整个输入文件。

perl -n0777 -e 'while (m/export {([^{}]+)}/mg) { $s = $1;
print "$1n" while $s =~ m/b((?!somefunction|otherfunction)w+)b/mg }' src/index.ts

第一个正则表达式循环遍历export { ... }表达式并取出括号之间的文本。第二个程序挑选出符号,跳过任何空格或标点符号,并打印它们。

负向前瞻说明如何从匹配中排除somefunctionotherfunction

相关内容

  • 没有找到相关文章

最新更新