我一直在嘗試使用 grep/awk/sed 獲取云函式,但是當前命令未獲取以多行格式列出的云函式。
這是在運行時作為變數傳遞的當前命令:
部署.sh
functions_list=$(grep 'export' src/index.ts | awk -F '[}{]' '{print $2}' | sed 's/^ *//; s/ *\$//; /^\$/d' | grep -v somefunction || echo '')
索引.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
uj5u.com熱心網友回復:
查看最終命令:
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、functionD 和 functionE,因為它們不屬于提供的模式:
'[}{]' '{print $2}'
我添加了 awk/sed 命令來最初用空格替換新行。
awk 1 ORS=' ' src/index.ts | sed -e 's/ / /g ; s/;/\n/g'
然后,最后,用換行符替換逗號。
s/, /\n/g
uj5u.com熱心網友回復:
這里的決議非常脆弱。不要讓事情變得太復雜,嘗試切換到 Perl,它可以讓您一次檢查整個輸入檔案。
perl -n0777 -e 'while (m/export \{([^{}] )\}/mg) { $s = $1;
print "$1\n" while $s =~ m/\b((?!somefunction|otherfunction)\w )\b/mg }' src/index.ts
第一個正則運算式回圈export { ... }運算式并拉出大括號之間的文本。第二個選擇符號,跳過任何空格或標點符號,然后列印它們。
負前瞻說明了如何排除somefunction或otherfunction從匹配中排除。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/466168.html
上一篇:如何使用bash腳本查找目錄的任何檔案是否包含特定字串?
下一篇:從shell腳本輸出創建json
