sedを使用してパターン以外の文字列を別の文字列に置き換える方法は?

sedを使用してパターン以外の文字列を別の文字列に置き換える方法は?

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

おすすめ記事