LinuxとMacの間でクロスプラットフォーム/標準sedを使用する方法は?

LinuxとMacの間でクロスプラットフォーム/標準sedを使用する方法は?

こんにちは、プロジェクトを配布するためにmakefileで実行するスクリプトがあります。ここでは、sedを使用して入力文字列から環境とプロジェクト名をキャプチャし、Ubuntuでうまく機能します。

この簡単なコマンド

 echo deploy-api-production | sed -E 's/deploy-\w+-(\w+)/\1/'

productionUbuntuで期待される結果を与える

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

Macで同じ結果を得るための一種の統合sedはありますか?

出力がMac実行の結果であることを望みます。

ケース2 - より一般的でプレフィックスも含まれています。

これを正しく分析したい

echo a-deploy-api-production | someprocessing
production

soは上記の状況に似ていますが、a-単語の前に追加の接頭辞単語があります。deploy

私は現在与えられた解決策に似たものを試しましたが、成功しませんでした。

echo a-deploy-api-production | awk -F'-' '$1=="a-deploy"{print $3}'

上記の結果は空です。結果を得るために修正したいと思います。production

ベストアンサー1

あなたはそれを使用することができますawk

echo deploy-api-production | awk -F'-' '$1=="deploy"{print $3}'

これにより、テキストがで区切られた部分に分割されます-。最初のフィールドが単語と一致する必要がありdeploy、3番目のフィールドが印刷されます。

更新された質問に新しいバリエーションが含まれています。同じコードを使用してawk直接比較することはできません。a-deployこれは、2つのフィールド(ダッシュで区切られている)と$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

おすすめ記事