Awk
如何在 linux 和 mac 之間使用跨平台/標準 sed?
您好我有一個腳本在項目部署的生成文件中執行。我在其中使用 sed 從輸入字元串中擷取環境和項目名稱,並且在 ubuntu 中效果很好。
這個簡單的命令
echo deploy-api-production | sed -E 's/deploy-\w+-(\w+)/\1/'
production
在 ubuntu 中給出預期的結果ubuntu 執行
$ echo deploy-api-production | sed -E 's/deploy-\w+-(\w+)/\1/' production
但在mac中給出了整個完整的字元串
deploy-api-production
mac執行:
$ echo deploy-api-production | sed -E 's/deploy-\w+-(\w+)/\1/' deploy-api-production
是否有某種統一的 sed,所以我在 mac 中也得到相同的結果?
我希望輸出也只是在 mac 執行中的生產
案例 2 - 更通用,也包括前綴
想要正確解析這個
echo a-deploy-api-production | someprocessing production
所以與上述情況類似,但在單詞
a-
之前確實有一個額外的前綴單詞deploy
我嘗試了類似於目前給定解決方案的方法,但沒有奏效
echo a-deploy-api-production | awk -F'-' '$1=="a-deploy"{print $3}'
以上結果為空,想修改得到結果
production
您可以使用
awk
:echo deploy-api-production | awk -F'-' '$1=="deploy"{print $3}'
這會將文本拆分為由 . 分隔的部分
-
。它要求第一個欄位與單詞匹配deploy
,然後列印第三個欄位。在您更新的問題中,您包含一個新的變體。您不能使用相同的
awk
程式碼直接比較a-deploy
,因為這是兩個欄位(請記住,它們被破折號分隔),並且$1
只是第一個欄位(即a
,而不是deploy
在這個新實例中)。在不知道所有案例的情況下,我建議您可能更樂意搜尋
deploy
字元串中的任何位置,如果找到,則列印最後一個欄位。(這也適用於您的原始案例。)echo deploy-api-production | awk -F'-' '/deploy/ {print $NF}' production echo a-deploy-api-production | awk -F'-' '/deploy/ {print $NF}' production