Awk

如何在 linux 和 mac 之間使用跨平台/標準 sed?

  • April 30, 2022

您好我有一個腳本在項目部署的生成文件中執行。我在其中使用 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

引用自:https://unix.stackexchange.com/questions/699984