如何以逗号分隔的多行格式 grep 云函数?
How to grep cloud functions in a multiline format separated by comma?
我一直在尝试使用 grep/awk/sed 获取云函数,但是当前命令未获取以多行格式列出的云函数。
这是在运行时作为变量传递的当前命令:
deploy.sh
functions_list=$(grep 'export' src/index.ts | awk -F '[}{]' '{print }' | 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 }' | sed 's/^ *//; s/ *$//; /^$/d; s/, /\n/g' | grep -v somefunction || echo '')
awk reads/scans 输入逐行;因此跳过 functionC、functionD 和 functionE,因为它们不属于提供的模式:
'[}{]' '{print }'
我添加了 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 = ;
print "\n" while $s =~ m/\b((?!somefunction|otherfunction)\w+)\b/mg }' src/index.ts
第一个正则表达式遍历 export { ... }
表达式并提取大括号之间的文本。第二个选择符号,跳过任何空格或标点符号,然后打印它们。
否定前瞻说明了如何从匹配中排除 somefunction
或 otherfunction
。
我一直在尝试使用 grep/awk/sed 获取云函数,但是当前命令未获取以多行格式列出的云函数。
这是在运行时作为变量传递的当前命令:
deploy.sh
functions_list=$(grep 'export' src/index.ts | awk -F '[}{]' '{print }' | 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 }' | sed 's/^ *//; s/ *$//; /^$/d; s/, /\n/g' | grep -v somefunction || echo '')
awk reads/scans 输入逐行;因此跳过 functionC、functionD 和 functionE,因为它们不属于提供的模式:
'[}{]' '{print }'
我添加了 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 = ;
print "\n" while $s =~ m/\b((?!somefunction|otherfunction)\w+)\b/mg }' src/index.ts
第一个正则表达式遍历 export { ... }
表达式并提取大括号之间的文本。第二个选择符号,跳过任何空格或标点符号,然后打印它们。
否定前瞻说明了如何从匹配中排除 somefunction
或 otherfunction
。