1つの文字列が含まれ、他の文字列が含まれていない場合はsedを適用する方法は?

1つの文字列が含まれ、他の文字列が含まれていない場合はsedを適用する方法は?

これを変換しようとしています。

url = ssh://[email protected]/project/repo.git

到着

url = ssh://[email protected]/scm/project/repo.git

しかし、これは単純なsed検索と置換ではありません。\turl文字列がで始まり、含まれていない場合にのみ検索と置換を適用したいと思いますscm

以下を含む行のみを置き換える開始セクションがあります。\turl

cat .git/config | sed "/\turl/ s=\.com\/=\.com\/scm\/=g"

scmただし、等度を持たせるために、すでに文字列が含まれていることを確認することはできません。そうではなく、sedを使用してコマンドを実行し続ける場合は、-i続行しますscm

ベストアンサー1

sedでは、次のように動作します。

sed '/url/ { /scm/! s=\.com/=\.com/scm/=g }'

アドレスを追加して無効にすることができ!、ブロックを使用してアドレス正規表現を他のアドレス正規表現に適用できます。

または、次の点を確認する必要があるscm場合もあります。.com/

sed '/url/ { \=\.com/scm/= ! s=\.com/=\.com/scm/=g }'

おすすめ記事