
ファイル内の別の文字列とパターンを一致させる前に、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"