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변수 이름으로 사용할 수 있습니다.

그래서 귀하의 요청에 따라 라인을 세 그룹으로 나누었습니다.

\(^[ ]*\- "\)~을 위한space - "

\(.*\)교체할 부품의 경우, 예:/Users/user2/Documents/Work

\(\/sdk\/license\.txt"$\)같은 부분에 대해 즉sdk/license.txt"

관련 정보