パターンをファイル内の他の文字列と一致させる前に、sedを使用してすべてを置き換える必要があります。
私のファイルにはさまざまなパスがあります。これらのパスの最後のいくつかのコンポーネントは、ユーザーに関係なく同じですが、最初のいくつかのコンポーネントは変更されます。
例えばユーザー1、ファイルには次のパスが含まれています
build:
- "/Users/user1/Projects/Stash/sdk/license.txt"
~のためユーザー2、パスは次のとおりです。
build:
- "/Users/user2/Documents/Work/sdk/license.txt"
最後の2つのコンポーネントは、/sdk/license.txt「これはすべてのユーザーに同じです。
このコンポーネントの前のすべての項目を、そのユーザーにのみ該当するパスにユーザーが提供したパスに置き換えたいと思います。 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"