こんにちは、プロジェクトを配布するためにmakefileで実行するスクリプトがあります。ここでは、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
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