sed を使用して、パターン以外のすべてを別の文字列に置き換えるにはどうすればよいでしょうか?

sed を使用して、パターン以外のすべてを別の文字列に置き換えるにはどうすればよいでしょうか?

ファイル内の別の文字列とパターンを一致させる前に、sedを使用してすべてを置き換える必要があります

ファイルにはさまざまなパスがあります。それらのパスの最後のいくつかのコンポーネントは、ユーザーに関係なく同じですが、最初のいくつかのコンポーネントは変更されます。

例えばユーザー 1ファイルには次のパスが含まれています

build:
   - "/Users/user1/Projects/Stash/sdk/license.txt"

のためにユーザー2、パスは

build:
   - "/Users/user2/Documents/Work/sdk/license.txt"

最後の2つのコンポーネントは、つまり「ライセンス「」はすべてのユーザーに対して同じです。

これらのコンポーネントの前のすべてを、ユーザー固有のパスに置き換えたいのですが。この種の置換を実行するには、sed をどのように使用すればよいでしょうか。私は Perl スクリプトを使用しています。

答え1

単純に後方参照を使うことができます

sed -e 's/\(^[ ]*\- "\)\(.*\)\(\/sdk\/license\.txt"$\)/\1path_with_which_to_be_replaced\3/'

ここ

\(....\)\1 \2は、グループ化して将来使用するために保存するために使用されます。置換で使用する場合は、変数名として使用できます。

したがって、あなたの要件に応じて、行を3つのグループに分割します

\(^[ ]*\- "\)のためにspace - "

\(.*\)交換する部品、例:/Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)同じ部分の場合、すなわちsdk/license.txt"

関連情報